0

Log N 時間で get/find を実行し、get 操作によって返されたオブジェクトから反復処理を行うには、データ構造が必要です。反復子は、要素がデータ構造に挿入されるのと同じ順序で反復する必要があります。

TreeSet を使用してこれを達成できますか? または他のデータ構造?

ありがとう!

4

3 に答える 3

1

から始めてSortedMap<Integer, Object>、挿入順序を追跡するためにキーを使用すると、必要に応じて高速tailMapな操作を使用できるようになります。

オブジェクトの位置をキー (またはオブジェクト自体) で見つける必要がある場合は、WeakHashMap<Object, Integer>キーからオブジェクトの位置にマップする別のキーを導入します。次に、取得したシーケンス番号を前のマップへのキーとして使用します。

于 2012-07-09T14:23:22.710 に答える
1

この回答は、挿入シーケンス番号によるアクセスではなく、でアイテムを取得/検索することを前提としています。この値は、アイテムが挿入される順序とはまったく関係がないと思います。

標準の Java 基礎クラスで得られる最も近いものは、LinkedHashSetです。これにより、高速検索と挿入順序の反復が可能になります。ただし、特定の位置から開始するイテレータは提供されないため、自分で実装する必要があります。に基づくかLinkedHashSet、独自のセット実装を使用します。HashSet最も簡単な方法は、を使用して自分でリンクを実装することだと思います。そうすれば、set メソッドを使用して開始要素を検索し、それを使用してリンクに続く反復子を作成できます。ラッパー オブジェクト内のリンクを非表示にできるため、API でリンクを公開する必要はありません。

于 2012-07-09T14:25:35.173 に答える
0

Java 6 を使用している場合は、ConcurrentSkipListSetConcurrentSkipListMapを確認できます。

于 2012-07-09T14:22:48.327 に答える