这个类是按名称排序的,但是当不同的对象具有相同的名称时会发生什么呢?
public class MyStuff implements Comparable<MyStuff> {
MyStuff(String n, int v){ name = n; value=v;}
String name; int value;
public int compareTo(MyStuff m){
return name.compareTo(m.name);
}
public String toString() { return name + " " + value + " ";}
public static void main(String[] args){
List<MyStuff> l = new ArrayList<MyStuff>();
MyStuff m0 = new MyStuff("hola",1);
MyStuff m1 = new MyStuff("hola",1);
MyStuff m2 = new MyStuff("hola",2);
MyStuff m3 = new MyStuff("hola",2);
l.add(m0);
l.add(m1);
l.add(m2);
l.add(m3);
Collections.sort(l);
System.out.println(l);
for(Object o: l) System.out.println(o.hashCode());
}
}结果:
[hola 1 , hola 1 , hola 2 , hola 2 ]
21722195
12719253
30758157
12773951哪个对象是第一个对象?取决于值,哈希码..?
发布于 2012-10-20 23:02:50
正如java doc: Collections中指定的,保证public static <T extends Comparable<? super T>> void sort(List<T> list)是稳定的。
所谓稳定,是指:对于相等的对象,即比较返回0,相对顺序不变,即排序前左侧的对象在排序后仍然位于左侧。
顺便说一句,正如java doc: Arrays中指定的那样,public static void sort(Object[] a)也可以保证是稳定的。似乎在java.util库中,当元素不是原语时,排序总是保证稳定性。
发布于 2012-10-20 22:20:37
不是的。与哈希码无关。它是您添加到列表中的元素的顺序。
Collections.sort()方法对ArrayList使用Arrays.sort(),这是一个mergesort,如果为compareTo returns >0,则仅交换元素
https://stackoverflow.com/questions/12989290
复制相似问题