4

のようなキーと値のマッピングを提供するデータ構造が必要ですがMap、(int) インデックス (例: ) に基づいてキーをフェッチすることもできます。目的のmyKey = myDS.get(index)キーを取得するためにデータ構造を反復処理する必要はありません。索引。

を使用することを考えLinkedHashMapましたが、特定のインデックスでキーを取得する方法がわかりません。で何か不足していLinkedHashMapますか? または、使用できる別のデータ構造はありますか?

編集:
これは重複ではありません。他の質問に対する正しい答えは、ある種のSortedMap;を使用することです。ただし、これはこの質問に対する正しい答えではありません。どの Java ライブラリでもサポートされていないインデックスEntryを介してデータ構造からを取得できるようにしたいからです。Integer

4

5 に答える 5

2

私の知る限り、これを行う単一のデータ構造はありません。標準の Java コレクション スイートには確かに 1 つもありません。

LinkedHashMapを効率的にインデックス化できないため、これも解決策ではありませんLinkedHashMap

キープベースのルックアップだけでなく、インデックスベースのルックアップも行いたい場合、ソリューションは 2 つのデータ構造の組み合わせである必要があります。

  • AMap<Key, Value>と anArrayList<Value>はより単純なアプローチですが、いくつかの問題がありArrayListます。- 挿入と削除により、リストの位置が不安定になります。

  • Map<Key, Value>安定したインデックスとスケーラブルな挿入と削除が必要な場合はMap<Integer, Value>、インデックス値を管理 (つまり、リサイクル) する方法が必要です。


Apache CommonsLinkedMapクラスは、挿入と削除に直面してインデックス値が安定しないという問題を除いて、可能な解決策です。

于 2013-08-11T04:46:38.220 に答える
0

このためのコレクションがあるとは思いません。コレクションは、要素がどこにあるかを正確に知りたい (リスト)か、いくつのキーまたは基準に基づいてすばやくアクセスしたい (マップ) という考えに基づいています。両方を実行すると、維持するのに非常に多くのリソースが必要になります。

もちろん、rocketboy の回答が示唆するように、このようなものを作成できますが、効率化することは実際には不可能だと思います。

于 2013-08-11T04:03:19.783 に答える