2013-05-30 119 views
-7

嗨,我是新來的Java我有一個ArrayList的[object1, object2...]如何通過比較元素的屬性來排序ArrayList?

和每個對象都有一個getNumber()方法,它返回一個整型數字

我如何可以通過比較getNumber的返回值排序的ArrayList()方法?

+2

爲什麼我downvoted這個問題:http://meta.stackexchange.com/a/149138/133242 –

+2

使用['Collections#sort(List,Comparator)'](http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort%28java.util.List,%20java。 util.Comparator%29) –

+1

和['Comparable'](http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)或['Compara tor'](http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html)。 –

回答

1

創建Comparator

// Here T is your class name 
public class Test implements Comparator<T> { 
    @Override 
    public int compare(T o1, T o2) { 
     return (o1.getNumber() - o2.getNumber()); 
    }  
} 

並將其傳遞給Collections.sort

Collections.sort(yourList, new Test()); 
0

您應該使用Comparator和Collections.sort() 確保您存儲在ArrayList中的對象的equals()hashCode()方法被正確覆蓋並遵守hashCode合約。

您可以看看this article瞭解更多詳情。

+0

使用'Collections#sort'時,不需要'equals'和'hashCode'。 –

+0

來自Comparable的javadoc: 強烈建議(儘管不要求)自然排序與equals相一致。這是因爲排序集合(和排序映射)沒有顯式比較器時,它們與自然排序與equals不一致的元素(或鍵)一起使用時表現得「奇怪」。特別是,這樣的有序集合(或有序映射)違反了集合(或映射)的一般契約,它是用等價方法定義的。 – clement