操作方法
自然排序: /* * 需求:自定义对象自然排序(按年龄从小到大)且对象唯一! * */ public class TreeSetTest { public static void main(String[] args) { TreeSet<Student> ts = new TreeSet<Student>(); Student s1 = new Student("one",1); Student s2 = new Student("two",2); Student s3 = new Student("three",3); Student s4 = new Student("four",4); Student s5 = new Student("five",5); Student s6 = new Student("six",6); Student s7 = new Student("six",6); Student s8 = new Student("four",4); 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.getAge() + s.getName()); } } }
因为底层是用了comparable的comparetor方法!所以学生类要实现comparable并重写comparable方法: public class Student implements Comparable<Student> public int compareTo(Student o) { //按年龄进行排序: int num = this.age - o.age; //去掉重复! if(num == 0) { this.name.compareTo(o.name); } return num; }
控制台打印结果: 1one 2two 3three 4four 5five 6six
比较器排序: public class CompareDemo { public static void main(String[] args) { TreeSet<Student> ts = new TreeSet<Student>( //这里用匿名内部类:内部类的格式是new 一个类或者接口然后重写方法就好了! new Comparator<Student>() { public int compare(Student o1, Student o2) { int num = o1.getAge() - o2.getAge(); if(num == 0) { o1.getName().compareTo(o2.getName()); } return num; }; } ); Student s1 = new Student("one",1); Student s2 = new Student("two",2); Student s3 = new Student("three",3); Student s4 = new Student("four",4); Student s5 = new Student("five",5); Student s6 = new Student("six",6); Student s7 = new Student("six",6); Student s8 = new Student("four",4); 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.getAge() + s.getName()); } } }