0

次のように宣言されたセットがあります

Set<String> orderSet = new LinkedHashSet <String>();

保存される文字列値は、日付と時刻の規則の組み合わせです

orderSet.add(bean.getDate()+"," + bean.getTimeConvention());

私は常に挿入順序として出力を取得します。これが、linkedHashSet が設計されている理由です。

最新の日付が最初になるように、出力を逆順にする必要がありますか?

NavigableSetについて聞いたことがありますが、私のシナリオではうまく機能しません..何か提案はありますか?

ありがとう

4

3 に答える 3

2

LinkedHashSetは、挿入順で並べられています。順番に物事を取得している場合 (データベースのクエリからなど)、取得した順序が維持され、O(1) ルックアップが提供されます (TreeSet の O(log n) と比較して)。オブジェクトの順序が簡単に比較できない場合にも役立ちます。

LinkedHashSet は、キャッシュにも特に役立ちます (LRU キャッシュを実装するために使用できるメソッドを提供するLinkedHashMapremoveEldestEntryも参照してください(オブジェクトを削除して、最近使用された 100 個 (または構成されているもの) のアイテムのみを維持します)。

ただし、LinkedHashSet はインターフェースNavigableSetのサブクラスではありません。これは、セットを操作するための多くのツールが存在しないことを意味します。NavigableSet を逆にするには、descendingIterator()またはを取得できますdescendingSet()。何かの次に高い値を取得したり、ある点から別の点へのサブセットを取得したりできるなど、他のビットがあります。

NavigableSet を実装するクラスは 2 つあります。ConcurrentSkipListSet (スキップ リストを使用) とTreeSet (レッド ブラック ツリーを使用) です。

NavigableSet の要件は、要素に順序付けがあることです (によって実装されていComparableます。これらには、StringDate、およびさまざまな数値クラスが含まれ、さらに多くのクラスが含まれます...または、さらに言えば、 Comparable を実装するものはすべて.

これらはすべてセットであることに注意してください。これは、構造内に要素のコピーが 1 つしかないことを意味します。実際に複数のコピーを持つリストを探している場合は、作業するリストがあります。これらは、さまざまな目的のためのさまざまなツールです。

于 2014-05-18T14:21:16.540 に答える
2

javadoc によると、 Set の目的は、要素のコレクション内の重複を排除することです。コレクションの要素を逆にするには、最初にリストを作成する必要があります。次に例を示します。

ArrayList<String> list = new ArrayList<String>(orderSet);
Collections.reverse(list);
于 2014-05-18T14:05:27.340 に答える