2010-04-02 114 views
3

我想排序在Java中的向量,但我Vector是不是int型的載體,它是對象排序自定義對象的矢量

的對象是一個向量:

public MyObject() { 
    numObj = 0; 
    price = new Price(); 
    pax = new Pax();   
} 

所以我有一個VectorMyObject,我想訂購numObject,我該怎麼做,我是新的Java?

非常感謝您的幫助。

回答

2

要排序的對象的向量,第一類爲MyObject必須實現可比和實施方法的compareTo(對象),然後使用Collections.sort(向量)的

class MyObject implements Comparable<MyObject> { 
    public int compareTo(MyObject a) { 
     //return either 1, 0, or -1 
     //that you compare between this object and object a 
    ``} 
} 

//and in your logic write this line 
Collections.sort(myVector); 

檢查的JavaDoc Vector

+0

最好使用泛型與'比較器' – Bozho 2010-04-02 17:29:44

+0

非常感謝你的快速答案,我實現了Comparable MyObject類,它的工作原理很好 謝謝 – Eddinho 2010-04-02 17:49:45

7

我假設您使用的是Collections.sort(..)。你有兩個選擇:

實施Comparable一個例子是:

public class MyObject implements Comparable<MyObject> { 
    // ..... other fields and methods 
    public int compareTo(MyObject other) { 
     return numObj - other.getNumObj(); 
    } 
} 

這將意味着項目按升序排序。如果您需要其他自定義排序,您可以創建一個Comparator來定義自定義比較並將其作爲參數傳遞給Collections.sort(..);

+0

非常感謝您的快速解答,我在MyObject類中實現了Comparable ,它的工作原理非常好,謝謝 – Eddinho 2010-04-02 17:50:13

+0

@ user307818請務必將答案標記爲已接受,如果它對您有用。 – Bozho 2010-04-02 17:52:50

1

實現Comparable將會正常工作。但是,爲了防止未來的錯誤,應該謹慎對待。上面的實現非常適合排序,但如果您稍後決定將MyObject實例放入SortedSet(如TreeSet)中,則會出現意想不到的行爲。如果它們具有相同的numObject數據成員的值,那麼不相同的項目將相互衝突。發生這種情況是因爲排序集使用Comparable實現(默認情況下)以確定相等性。

詳情請參閱http://eyalsch.wordpress.com/2009/11/23/comparators/