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
本站部分图文来源于网络,如有侵权请联系删除。