1

此类按名称排序,但是当各种对象具有相同名称时会发生什么?

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

哪个对象是第一个?取决于值,哈希码..?

4

2 回答 2

4

正如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-20T15:02:49.590 回答
0

,哈希码与它无关。这是您添加到列表中的元素的顺序。

Collections.sort()方法Arrays.sort()用于ArrayListwhich is amergesort仅在以下情况下交换元素compareTo returns >0

于 2012-10-20T14:20:37.183 回答