ArrayList 和TreeSet排序问题

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()));