1

私は TreeSet を使用してみましたが、それを変更する方法はありますか? 方法がない場合、ソートされた (等しいおよび等しくない) 要素を格納するために何を使用すればよいですか?

4

5 に答える 5

5

List [特に an ] を使用しArrayListて要素を保持し、Collections.sort()入力が完了したら並べ替えることができます。

場合によってPriorityQueueは、 a も良いオプションです。実際に必要なのは、コレクション内の最小/最大の要素を維持することです。

ソートされたコレクションを維持したい場合 - SortedBag[apache commons collections から] があなたの求めているものかもしれません。ここから jar をダウンロードしてクラスパスに追加し、それを使用するだけです! Apache 製品は非常に一般的に使用されているため、頻繁にテストされることに注意してください。

于 2012-04-15T21:40:53.360 に答える
3

この目的でSortedMultisetを使用できます。これは、Google の Guava ライブラリに含まれており、 http ://code.google.com/p/guava-libraries/ からダウンロードできます。

Eclipse を使用している場合は、Guava の .jar ファイルをプロジェクトのクラスパスに追加する必要があります (プロジェクトを右クリックし、プロパティを選択してから Java ビルド パスを選択し、最後にライブラリ タブに JAR を追加します)。

プロジェクトでサードパーティのライブラリを使用したくない場合、最適なオプションは特定のユースケースによって異なります。

于 2012-04-15T21:58:52.353 に答える
0

ASetは定義上、重複を許可しません。

別の が必要です。Comparatorまたは、任意の種類の を使用できますList

SortedSet<String> temp = new TreeSet<String>(new MyComparator());

どこでMyComparator実装しますComparator

public class MyComparator implements Comparator<String> {

    public int compare(String a, String b) { ... }
}
于 2012-04-15T21:47:22.967 に答える
0

順序付けされた 以外に、Listまだ使用できますTreeSetが、余分なスペースがあります。

つまり、に追加しようとする重複アイテムのカウンターを保持しますTreeSet。このアプローチは、発生ごとにカウンターを保持するために を
介して直接実装できます。TreeMap

このようにして、ユーザーが提供した複製の数を常に知ることができます (カウンターは記録を保持しますが、TreeSet は値自体を保持するだけです)。
余分なスペースのオーバーヘッドがありListますが、注文すると、追加/削除などの順序を維持するオーバーヘッドが発生
します。必要に応じて異なります。

于 2012-04-15T21:47:23.280 に答える
0

ツリーマップを使用できます。マップでは、{key,value} ペアを保存しますが、キーはオブジェクトであり、値はコレクション内のキーの出現回数です。たとえば、キー「Bob」が 3 回あるため、対応するマップ エントリは {"Bob になります。 ", 3} . このようにして、スペースを節約し、オブジェクトを並べ替えたまま目標を達成できます。キーに tge equals と hashcode メソッドが実装されていることを確認してください。yiur キー (文字列など) に自然な順序が使用できない場合は、thm の Comparable インターフェイスも実装する必要があります。

幸運を!

于 2012-04-15T21:48:16.810 に答える