2012-10-20 68 views
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 

哪個對象是第一?取決於值,哈希碼..?

+0

甲'hash'被設計成產生用於數據的隨機數。在散列集合中,這有助於僞隨機排列數據,以便只有給定的關鍵字可能在同一個存儲桶中。簡而言之,哈希被設計爲與排序相反。 ;) –

回答

0

號哈希碼有什麼用它做。這是您添加到列表中的元素的順序。

Collections.sort()方法使用Arrays.sort()ArrayList其是mergesort其中僅交換如果compareTo returns >0

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庫,排序,總能保證穩定時的元素不是基本類型。