Log N 時間で get/find を実行し、get 操作によって返されたオブジェクトから反復処理を行うには、データ構造が必要です。反復子は、要素がデータ構造に挿入されるのと同じ順序で反復する必要があります。
TreeSet を使用してこれを達成できますか? または他のデータ構造?
ありがとう!
Log N 時間で get/find を実行し、get 操作によって返されたオブジェクトから反復処理を行うには、データ構造が必要です。反復子は、要素がデータ構造に挿入されるのと同じ順序で反復する必要があります。
TreeSet を使用してこれを達成できますか? または他のデータ構造?
ありがとう!
から始めてSortedMap<Integer, Object>
、挿入順序を追跡するためにキーを使用すると、必要に応じて高速tailMap
な操作を使用できるようになります。
オブジェクトの位置をキー (またはオブジェクト自体) で見つける必要がある場合は、WeakHashMap<Object, Integer>
キーからオブジェクトの位置にマップする別のキーを導入します。次に、取得したシーケンス番号を前のマップへのキーとして使用します。
この回答は、挿入シーケンス番号によるアクセスではなく、値でアイテムを取得/検索することを前提としています。この値は、アイテムが挿入される順序とはまったく関係がないと思います。
標準の Java 基礎クラスで得られる最も近いものは、LinkedHashSetです。これにより、高速検索と挿入順序の反復が可能になります。ただし、特定の位置から開始するイテレータは提供されないため、自分で実装する必要があります。に基づくかLinkedHashSet
、独自のセット実装を使用します。HashSet
最も簡単な方法は、を使用して自分でリンクを実装することだと思います。そうすれば、set メソッドを使用して開始要素を検索し、それを使用してリンクに続く反復子を作成できます。ラッパー オブジェクト内のリンクを非表示にできるため、API でリンクを公開する必要はありません。
Java 6 を使用している場合は、ConcurrentSkipListSetとConcurrentSkipListMapを確認できます。