5

高速検索のために順番に最適化された要素の配列を保持するJavaのクラスはありますか?

つまり、数値インデックス(のようにVector)とハッシュ(のようにHashMap)の両方で要素を取得する必要があります。

LinkedHashMapが一致しません

LinkedHashMap順序を保証するので一致しないと思いますが、インデックス(位置番号)による高速アクセスはできません。説明によると、特定の位置を見つけるためにチェーン全体をトラバースする必要があります。これはCollection、イテレータでできることです。

編集2

つまり、キーによる検索とインデックスによる検索の両方が、キーだけでなく高速である必要があります。

4

4 に答える 4

2

を使用してMap、ハッシュによる要素の高速検索を行うことができます。定義上、aMapは順序付けられておらず、インデックスについて話すことはあまり意味がありません。LinkedHashMapを使用すると、反復時に挿入順序が保持されることが保証されるため、役立つ場合があります。ただし、インデックスによる要素へのアクセスには、次のような追加の処理が必要です。

map.entrySet().toArray()[index] // mind the casts, etc.

マップが頻繁に変更されない場合は、配列をキャッシュし、インデックスでエントリにアクセスする前にマップのサイズが変更されているかどうかを確認し、サイズの変更が検出された場合にのみ新しい配列を作成すると、上記がうまく機能します。一方、マップが頻繁に変更される場合は、アクセスごとに配列を再作成する必要があり、パフォーマンスの低いデータ構造が作成されます。

于 2012-05-23T09:22:42.917 に答える
2

LinkedHashSetを試すことができると思います。

于 2012-05-23T09:22:51.383 に答える
1

LinkedHashMapを使用します。これにより、キーを介して要素を取得できます。また、保存したのと同じ順序で要素を取得することもできます。

于 2012-05-23T09:23:14.273 に答える
1

LinkedHashMapを探していると思います

ドキュメントから:

予測可能な反復順序を使用した、マップインターフェイスのハッシュテーブルとリンクリストの実装。この実装は、すべてのエントリを介して実行される二重リンクリストを維持するという点でHashMapとは異なります。このリンクリストは、反復順序を定義します。これは通常、キーがマップに挿入された順序(挿入順序)です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。(m.containsKey(k)が呼び出しの直前にtrueを返すときに、m.put(k、v)が呼び出された場合、キーkはマップmに再挿入されます。)

于 2012-05-23T09:24:10.030 に答える