百木园-与人分享,
就是让自己快乐。

集合框架(TreeSet排序--存储字符串---自定义对象)

TreeSet:能够对元素按照某种规则进行排序。
* 排序有两种方式
* A:自然排序
* B:比较器排序
*
* TreeSet集合的特点:排序和唯一
*
* 通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法

 

A:自然排序

 1 public class TreeSetDemo {
 2     public static void main(String[] args) {
 3         // 创建集合对象
 4         // 自然顺序进行排序
//无参构造--自然排序
5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7 // 创建元素并添加 8 // 20,18,23,22,17,24,19,18,24 9 ts.add(20); 10 ts.add(18); 11 ts.add(23); 12 ts.add(22); 13 ts.add(17); 14 ts.add(24); 15 ts.add(19); 16 ts.add(18); 17 ts.add(24); 18 19 // 遍历 20 for (Integer i : ts) { 21 System.out.println(i); 22 } 23 } 24 }

 学生类----存储自定义对象

package Day17;
//Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,
// 类的 compareTo 方法被称为它的自然比较方法。
public class Student1 implements Comparable<Student1> {
    private String name;
    private int age;

    //构造
    public Student1(){}

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //按照姓名的长度进行排序
    //Comparable此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,
     // 类的 compareTo 方法被称为它的自然比较方法。
     //重写接口的compareTo方法

public int compareTo(Student1 m){
//首先进行姓名长度的比较
        int num  = this.name.length()-m.name.length();
        //如果姓名长度相同再比较其姓名是否相同
        int num2 = num==0? this.name.compareTo(m.name):num;
        //姓名长度相同==名字相同==再不其年龄是否相同
        int num3 = num2==0?this.age-m.age:num2;

        return num3;
    }

}

 测试类---存储自定义对象

package Day17;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.TreeSet;
//按照姓名的长度进行排序
public class Lx2 {
    public static void main(String[] args) {
        //创建TreeSet集合对象---给出泛型 =---无参构造自然排序
TreeSet<Student1> AA =new TreeSet<Student1>(); //创建学生类对象 Student1 A = new Student1(\"赵同刚哈哈\",25); Student1 B = new Student1(\"王丽\",25); System.out.println(A.compareTo(B)); Student1 C = new Student1(\"赵同刚哈哈\",27); Student1 D = new Student1(\"王丽丽\",25); Student1 E = new Student1(\"朱庆娜哈\",24); Student1 F = new Student1(\"刘诗诗哈哈哈哈哈\",25); Student1 G = new Student1(\"诸葛亮哈哈哈哈\",28); //将学生类对象的数据添加到集合中 //添加时。add方法中就具有Comparable接口中的compareTo方法 //在学生类中进行对compareTo的重写--制定输出的标准 //此时的输出标准是--姓名长度--姓名是否相同--年龄 AA.add(A); AA.add(B); AA.add(C); AA.add(D); AA.add(E); AA.add(F); AA.add(G); //遍历输出查看 for(Student1 e : AA ){ System.out.println(e.getName()+\"---\"+e.getAge()); } } }

 

TreeSet比较器排序

学生类

public class Student1{
    private String name;
    private int age;

    //构造
    public Student1(){}

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

 实现类

  package cn.itcast_07;

import java.util.Comparator;

public class MyComparator implements Comparator<Student> {

    @Override
    public int compare(Student s1, Student s2) {
        // int num = this.name.length() - s.name.length();
        // this -- s1
        // s -- s2
        // 姓名长度
        int num = s1.getName().length() - s2.getName().length();
        // 姓名内容
        int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
        // 年龄
        int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
        return num3;
    }

}

 

 

 

测试类

 

package cn.itcast_07;

import java.util.Comparator;
import java.util.TreeSet;

/*
 * 需求:请按照姓名的长度排序
 * 
 * TreeSet集合保证元素排序和唯一性的原理
 * 唯一性:是根据比较的返回是否是0来决定。
 * 排序:
 *         A:自然排序(元素具备比较性)
 *             让元素所属的类实现自然排序接口 Comparable
 *         B:比较器排序(集合具备比较性)
 *             让集合的构造方法接收一个比较器接口的子类对象 Comparator
 */
public class TreeSetDemo {
    public static void main(String[] args) {
        // 创建集合对象
        // TreeSet<Student> ts = new TreeSet<Student>(); //自然排序
        // public TreeSet(Comparator comparator) //比较器排序
        // TreeSet<Student> ts = new TreeSet<Student>(new MyComparator());

        // 如果一个方法的参数是接口,那么真正要的是接口的实现类的对象
        // 而匿名内部类就可以实现这个东西
        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                // 姓名长度
                int num = s1.getName().length() - s2.getName().length();
                // 姓名内容
                int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
                        : num;
                // 年龄
                int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
                return num3;
            }
        });

        // 创建元素
        Student s1 = new Student(\"linqingxia\", 27);
        Student s2 = new Student(\"zhangguorong\", 29);
        Student s3 = new Student(\"wanglihong\", 23);
        Student s4 = new Student(\"linqingxia\", 27);
        Student s5 = new Student(\"liushishi\", 22);
        Student s6 = new Student(\"wuqilong\", 40);
        Student s7 = new Student(\"fengqingy\", 22);
        Student s8 = new Student(\"linqingxia\", 29);

        // 添加元素
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        ts.add(s7);
        ts.add(s8);

        // 遍历
        for (Student s : ts) {
            System.out.println(s.getName() + \"---\" + s.getAge());
        }
    }
}

 


来源:https://www.cnblogs.com/ztg-java-xuexi/p/16060750.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 集合框架(TreeSet排序--存储字符串---自定义对象)

相关推荐

  • 暂无文章