Javaのハッシュマップを使用してK Vを得るためのO(1)の方法?

TangoFoxtrot:

ジャワ8にハッシュマップのためにVを使用して、Kを得るためのO(1)の方法はありますか?です私は2つのハッシュマップ(KVとVK)を使用する必要がありそうであればだろうと敗北O(1)を有することを目的?

コンテキストの場合、私はどちらかの値またはキーを使用して(文字列ユーザ名、整数userIdentifier)を得るための最も効率的な方法を見つけようとしています。

Mureinik:

一般的な注意点として - 隠された仮定は値も一意であることをここにあります。あなたが考慮に入れ、それは多くの答えを変更しないことを取る場合でもがそうでなければ、あなたは、価値によって、単一のキーが、キーのリストを取得することができません。また、ユーザ名とのuserIdのあなたのユースケースで、これは完全に議論の余地の点であってもよいです。

あなたが言及したように、シンプルではHashMap十分ではないだろう-それはあなたがO(n)の操作となり、特定のキーを持つエントリを検索するためのエントリを反復処理する必要があると思います意味します。

2つの使用HashMap(IDおよびIDに名前を名前)Sは良い方法です。これは削除/利用者を変更する/ 1つではなく、2つの操作を実行するためにあなたが追加するたびに持っていると思います意味だろうが、あなたはまだ一定時間操作の一定の数を実行しているので、大きさ(の順序には影響しません)、あなたはO(1)挿入時間を維持します。
これは実際にはかなり一般的なアプローチで、あなたのプロジェクトにサードパーティ製のライブラリを導入することができた場合、この概念のかなり固体の実装は、Apache Commonsのコレクションのような、そこにありますDualHashBidiMap

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222081&siteId=1