4

オブジェクト Item でいっぱいの ArrayList を作成するインベントリ クラスがあります。これもクラスです。ArrayList をソートするために呼び出す必要があることはわかっています Collections.sort(items);(ちなみにアイテムと呼ばれています)。割り当ては、Item クラスでインターフェイスを使用する必要があることを示しています。Comparator または Comparable を実装するかどうか、compareTo()メソッドまたはメソッドのいずれかに対して何をcompare()丁寧に記述するかはわかりません。またCollections.sort(items)、ArrayList を宣言した直後に呼び出しがありますが、これは問題ありませんか?

Comparable<Item>編集: 私の先生は、Item クラスに実装することを望んでいると明言しました。

4

3 に答える 3

1

あなたは実装する必要がComparableあり、それはうまくいくでしょうCollections.sort

新しいコンパレーターが必要で、使用したくない場合は、新しいコンパレーターをComparable作成して次のように使用できますComparatorCollections.sort(list, new MyComparator())

public class Fruit implements Comparable<Fruit>{
    
    private String fruitName;
    private String fruitDesc;
    private int quantity;
    
    public Fruit(String fruitName, String fruitDesc, int quantity) {
        super();
        this.fruitName = fruitName;
        this.fruitDesc = fruitDesc;
        this.quantity = quantity;
    }
    
    public String getFruitName() {
        return fruitName;
    }
    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }
    public String getFruitDesc() {
        return fruitDesc;
    }
    public void setFruitDesc(String fruitDesc) {
        this.fruitDesc = fruitDesc;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public int compareTo(Fruit compareFruit) {
    
        int compareQuantity = ((Fruit) compareFruit).getQuantity(); 
        
        //ascending order
        return this.quantity - compareQuantity;
        
        //descending order
        //return compareQuantity - this.quantity;
        
    }   
}

出典:ムキョン

于 2013-04-21T19:26:00.093 に答える
0

には 2 つのバージョンがありCollections.sort()ます。

Collections.sort(List)およびCollections.sort(List,Comparator)。1 つは を受け取り、Listもう1 つはListと のインスタンスを受け取りますComparator。単一の引数は、クラスがComparablesort()を実装し、 compareTo()メソッドをオーバーライドしていることを期待します。引数が 2 つのメソッドは、 Comparatorのインスタンスを想定しています。ここで、そのcompare()メソッドを実装してオーバーライドしています。sort()Comparator

それがクラスをソートする明確で自然な方法である場合、オブジェクトは実装Comparableする必要があり、誰もがクラスをソートする必要があり、通常はその方法でソートしたいと考えています。

ただし、並べ替えがクラスの通常とは異なるユース ケースである場合、または複数の並べ替え順序が存在する可能性がある場合は、aを使用することComparatorをお勧めします。

また、ArrayList を宣言した直後に Collections.sort(items) 呼び出しがありますが、これは問題ありませんか?

sort()をソートする必要があるときに呼び出しますList。後に項目を追加しても、新しい要素の追加によるリスト項目の順序の変更に対応するために、sort()自動的に並べ替えられません。List

実装例:

public int compareTo (Item other) { 
   return new Integer(this.getID()).compareTo(new Integer(other.getID()));
}
于 2013-04-21T19:26:45.377 に答える