问题描述
- 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是有序不排序的,当然会乱
解决方案三:
TreeSet 自动排序的,不管怎么打乱顺序。ArryList是有序不排序的,当然会乱
解决方案四:
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()));