2

私のアプリケーションでは、すでに

Map<String, List<String>>

ここで、リスト内の特定の文字列にマップされているキーを見つける必要がある別のユースケースがあります。

私は次のように書くことを考えています:

string getKey(Map<String, List<String>> m, String str) {
  for (Entry<String, List<String>> entry :m.entrySet()) {
    if(entry.getValue().contains(str)) {
      retrun entry.getKey();
    }
  }
  return null;
}

Map最大2000エントリを持つことができます。そしてそれぞれListが最大500String秒を持つことができます。

より適切な提案はありますか?Mapより良い方法があれば、初期データ構造()を変更することもできます。

4

2 に答える 2

5

文字列からキーのリストへの逆マッピングを提供する別のマップを追加することをお勧めします。これには、最初のマップとの同期を維持するためにもう少し作業が必要になりますが、タスクに最高のパフォーマンスが得られます。

それでも、そのようなクエリの頻度が比較的低いと思われる場合は、ソリューションの方が優れている可能性があります(ただし、遅くなりますが、両方のマップの同期を維持するために節約した時間でそれを補うことができます)。

于 2013-01-14T12:08:36.123 に答える
2

Guava APIに精通していますか?依存関係を追加/変更する自由がある場合は、特にMultimapインターフェイスの実装を確認する価値があります。同じキーを複数の値にマッピングできる場合のために正確に構築されています。

Map<String, List<String>>私が質問を誤解し、同じキーが複数の値にマップされない場合、現在のアイデアは本質的にそれだけなので、質問を再定式化/再考する必要があるかもしれません。

于 2013-01-14T12:14:16.623 に答える