3

文字列を整数にマッピングするクラスを構築しています。したがって、リンゴが 3 つある場合、リンゴを 3 つにマッピングします。

オブジェクトの名前を数字の降順で並べ替えるクラスを作成する必要があります。

だから私が持っているなら

(りんご、3) (みかん、2) (バナナ、5)

(バナナ, 5), (りんご, 3), (みかん 2)

私の人生を楽にするクラスがすでにあるのか、それともどのように実装するのか疑問に思っていました。

ありがとう。

4

3 に答える 3

6

オブジェクト (apples, 3) (oranges, 2) (bananas, 5) を List に入れ、Collections.sort(yourlist) を呼び出すことができるはずです。次に、宣言したオブジェクトが Comparable インターフェイスを実装していることを確認する必要があります。

詳細については、http://java.sun.com/docs/books/tutorial/collections/interfaces/order.htmlを参照してください。

あなたがオブジェクトを次のように宣言したとしましょう

public class FruitAndCount implements Comparable<FruitAndCount> {
    private final String name;
    private final Integer count;

    public FruitAndCount(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String name() { return name;  }
    public int count()   { return count; }

    public int compareTo(FruitAndCount o) {
        return this.count.compareTo(o.count);
    }
}

次に、リストをソートする次の呼び出しを行うことができるはずです。

FruitAndCount fruitArray[] = {
    new FruitAndCount("Apples", 3),
    new FruitAndCount("Oranges", 2),
    new FruitAndCount("Bananas", 5)
};

List<FruitAndCount> fruit = Arrays.asList(fruitArray);
Collections.sort(fruit);

次に、並べ替えられた果物のリストが必要です。

于 2010-01-24T01:45:25.260 に答える
4

クラスに を実装できるのは常に良いComparableことですが、できない場合や望ましくない場合があります (たとえば、異なる属性に基づいて同じ型を異なる方法で比較できるようにする必要がある場合)。

この場合、オーバーロードされたCollections.sort()メソッドを使用することをお勧めします。このメソッドは、List<T>ソートにComparator<T>を使用し、オブジェクトのソート方法を決定するために を使用します。これは、古いタプルから新しいタプルを作成するよりもはるかにクリーンであり、実装するよりも柔軟性がありますComparable(これも有効なソリューションです)。

于 2010-01-24T01:55:42.540 に答える
2

あなたは本当に見てみたいTreeMap.

カウントが一意であると仮定すると、単純にタプルを逆にして、カウントをキーとして格納し、果物の名前を値として格納します。その後、TreeMap はキー値の昇順で並べ替えられたアイテムを格納し、値を読み取ることができます。ソートは挿入時に行われるため、取得時間は非常に短くなります。

一意でないカウントがある場合は、TreeMap を利用できる簡単な解決策がここにあります。

于 2010-01-24T01:44:38.150 に答える