import java.util.*;
public class Test {
public static void main(String[] args) {
Employee Allan = new Employee("Allan");
Employee Bell = new Employee("Bell");
Employee Chris = new Employee("Chris");
Employee David = new Employee("David");
Employee Eric = new Employee("Eric");
//TreeSet<Employee> staff = new TreeSet<Employee>();
ArrayList<Employee> staff = new ArrayList<Employee>();
staff.add(David);
staff.add(Bell);
staff.add(Chris);
staff.add(Eric);
staff.add(Allan);
//Collections.shuffle(staff);
System.out.println(staff);
}
}
我已经在Emploee类里重写了compareTo方法,方法如下:
public int compareTo(Object o) {
if(o instanceof Employee) {
Employee p =(Employee)o;
return this.name.compareTo(p.name);
}
return 0;
}
在代码执行过程中发现,如果是TreeSet,就算打乱了Employee的顺序,输出结果仍然完成排序。
如果换成ArryList,就是没有拍过序的,可是我不是已经重写了compareTo方法了么。。。求解
你的类是否继承了icompare接口,你调试看看是否执行了比较函数
TreeSet 自动排序的,不管怎么打乱顺序。ArryList是有序不排序的,当然会乱
虽然重写了compareTo()方法,但是是不起作用的。因为你的代码中没有调用Collections.sort()这个方法,可以查看api来使用这个函数
TreeSet是自动排序的。。。。。建议多看API
TreeSet是在add的时候会根据Comparable实现的接口继续拧排序,add完也就拍完序了。最终实际上用的是treemap
ArryList在add的时候是不排序的,可以通过Collections.sort(staff)的方式进行排序
TreeSet是有序的集合,如果默认的排序方式不符合要求可以自定义一个比较器:实现接口Comparator 中的compare方法,然后在new TreeSet的时候把这个
比较器以参数的方式穿进去.
List是按照加入顺序add的,如果想排序的话也可以按照上面说的实现compar接口然后Collections.sort(list,(new Mycompare()));