这是第一篇java博客
这是一篇关于java中如何对TreeSet进行排序的两种方式。
关于TreeSet
TreeSet集合是可以给元素进行重新排序的一个Set接口的实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator进行排序,具体取决于使用的构造方法。 存储特点: 无序存储,排重,通过二叉树实现的集合,可以给元素进行重新排序。
TreeSet<Person> t1 = new TreeSet<Person>() ;
t1.add(new Person("chen", 20));
t1.add(new Person("chen", 19));
t1.add(new Person("chen", 199));
Iterator<Person> p1 = t1.iterator();
while (p1.hasNext()) {
System.out.println(p1.next());
}
添加元素:姓名和年龄,通过年龄对元素进行比较
第一种方式
自定义比较器:
public class My1 implements Comparator <Person>{
@Override
public int compare(Person o1, Person o2) {
int num=o1.getAge()-o2.getAge();
return num;
}
}
新建一个比较器,继承Comparator比较类,里面写比较规则,我写的是如果前一个的age比后一个大,就返回第一个,也就是升序。main代码修改:
TreeSet<Person> t1 = new TreeSet<Person>() ;
== 改为==
`TreeSet<Person> t1 = new TreeSet<Person>(new My1());`
== main方法更新后:==
TreeSet<Person> t1 = new TreeSet<Person>(new My1());
t1.add(new Person("chen", 20));
t1.add(new Person("chen", 19));
t1.add(new Person("chen", 199));
Iterator<Person> p1 = t1.iterator();
while (p1.hasNext()) {
System.out.println(p1.next());
}
第二种方法
自然排序:
Person类中实现 Comparable接口,重写Comparable接口中的Compareto方法
TreeSet<Person> t1 = new TreeSet<Person>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int num=o1.getAge()-o2.getAge();
return num;
}
});
t1.add(new Person("chen", 20));
t1.add(new Person("chen", 19));
t1.add(new Person("chen", 199));
Iterator<Person> p1 = t1.iterator();
while (p1.hasNext()) {
System.out.println(p1.next());
}
结果为: