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 <class of Product> productDatabase を宣言しました。製品クラスにはいくつかのフィールドがあります。主な問題は、productDatabase 要素をソートできないことです。

Collections.swap() を使用していますが、ArrayList が別のオブジェクトである要素で構成されている場合でも、そのメソッドを使用できますか?

また、ブール値であり、要素のスワップが必要かどうかを知るための値を返す、私が書いたcompareToメソッドを見てほしい。

前もって感謝します...そして私の最近の最初の悪い投稿で申し訳ありません。

4

1 に答える 1

0

を使用して並べ替えアルゴリズムを実装することによって車輪を再発明する必要はありませんswap()。 は、 mergesort の優れた実装を使用Collectionsしたメソッドを既に提供しています。sort()

を実装し、カスタム比較基準に従ってをソートするために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>ProductComparator<Object>instanceofProductList

Productsまたは、 a などの順序付けられたデータ構造にのみ追加しTreeSet<Product>て、独自の を提供しながら、フィルター処理を繰り返しますComparator<Product>

于 2013-11-04T10:11:28.043 に答える