2013-11-04 21 views
1
public void sortDatabase(){ 
     for(int j=0;j<productDatabase.size()-1;j++){ 
     for(int i =0;i<productDatabase.size()-j-1;i++){ 
    if(compareTo(i)){ 
     Collections.swap(productDatabase,i,i++); //Με την Χρήση της Collections βιβλιοθήκης κάνω SWAP! Πρέπει να βάλω την βιβλιοθήκη όμως! 

    } 


    } 
    } 
} 

public boolean compareTo(int index){ 

    if(productDatabase.get(index).getPrice() > productDatabase.get(index++).getPrice()){ 
     return true; 
    } 
    else 
     return false; 



} 

上次我以非常糟糕的方式發佈我的答案。對不起,我的英語真的很爛,但這是我的問題。我已經聲明瞭一個ArrayList產品> productDatabase類的ArrayList <。產品類有一些領域。主要問題是我無法排序我的productDatabase元素。ArrayList <class>交換方法

我使用Collections.swap(),但即使我的ArrayList由另一個對象的元素組成,我可以使用該方法嗎?

另外我想讓你看看我寫的compareTo方法,它是布爾型的,並返回一個值來知道是否需要交換元素。

在此先感謝...並感到抱歉,因爲我最近的第一個錯誤的帖子。

+0

如果您只想對其進行排序,請在productDatabase對象的類中實現Comparable,然後使用Collections.sort – Akkusativobjekt

回答

0

有沒有必要通過使用swap()實施排序算法重新發明輪子。 Collections已經提供了一個sort()方法,使用一個很好的mergesort實現。

執行Comparator<Product>並使用Collections.sort(List<T>, Comparator<T>)根據自定義比較條件對List進行排序。

Comparator<Product> PRICE_COMPARATOR = new Comparator<Product>() { 
    @Override 
    public int compare(Product o1, Product o2) { 
     // Check for nulls if necessary 
     return o1.getPrice().compareTo(o2.getPrice()); 
    } 
} 

List<Product> sortedList = Collections.sort(unsortedList, PRICE_COMPARATOR); 

如果你的List不是List<Product>,但List<Object>代替(它可能包含不Product的項目進行),你可以實現一個Comparator<Object>和使用instanceof裏面在年底離開非Product項目List

或迭代過濾它,同時僅將Products添加到有序數據結構,如TreeSet<Product>,提供您自己的Comparator<Product>

相關問題