0

重複したキーを持つことができるが、値が異なる何らかの構造を作成したいと思います。私はJavaを使用しており、ハッシュマップは素晴らしいですが、重複キーを許可していません。マルチマップ用にGoogle guavaライブラリをインポートしましたが、より良いアイデアや提案を機能させることはできませんか? 複数のオブジェクトを保存し、キーを使用してそれらを検索したいのですが、一部のオブジェクトは同じキーを持っています。

Java辞書を探しています

これは私が挿入したいものの例です

    NP|DET|NOM|
    NP|PROPERNOUN|
    NOM|NOUN|NOUN|
    S|NP|VP|
    VP|VERB|NP|
    VP|VERB|PP|

一番左の値がキーで、右の端子が値です

4

5 に答える 5

2

HashMapたとえば、ある種のリストを使用してその中に入れることをお勧めします

HashMap<String, ArrayList<TheKindOfStuffYouWantToSave>>
于 2013-05-17T14:23:04.517 に答える
2

定義により、aMapに一意でないキーを含めることはできません。Collection値を(例: )として保存する必要がありますArrayList

private Map<String, Collection<String>> myDictionary = new HashMap<>();

public void addWord(String word, String definition) {
    Collection definitions = myDictionary.get(word);
    if(definitions == null) {
         definitions = new ArrayList<String>();
         myDictionary.put(word, definitions);
    }
    definitions.add(definition);
}
于 2013-05-17T14:24:34.893 に答える
1

これを行う必要がある場合は、O(1) ルックアップ時間が失われます。あなたができる最善のことは、バイナリツリーを実装してこれを実現し、キーが重複する場合に最適なルックアップと挿入時間を実現することです。Hashmap を拡張し、put 関数をオーバーライドして衝突を処理することもできます。

Apache Commons を使用できる場合は、次の Multimap と MultiHashmap の例を確認してください。 org.apache.commons.collections.MultiHashMap

MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);

出典: Apache Commons の Multimap & Multihashmap ドキュメント

注: 投稿する前に、既存の質問があるかどうかを確認してください。

于 2013-05-17T14:27:37.417 に答える
1

Java has no set or map structure to store duplicate keys.

If you want to store multiple values under one key, you should store Collection as value.

For example:

private Map<K, Collection<V>> map = new HashMap<K, Collection<V>> ();

public void multiPut(K k, V v) {
  Collection<V> c = map.get(k);
  if (c == null) {
    c = new ArrayList<V>();
    map.put(k, c);
   }
 c.add(v);
}
于 2013-05-17T14:25:39.847 に答える
0

以下に示すように、カスタムロジックを考えることができます

HashMap を作成します。ここでキーは単語、値は意味の配列リストです。

コードにディクショナリ エントリを追加するメソッドを記述します。メソッドは、キー エントリが存在しないかどうかを確認し、配列リストを初期化し、このリストに値を追加し、最後にこの配列リストを新しいキーに対してハッシュマップに保存する必要があります。キーが存在する場合は、配列リストを取得してエントリを追加します。

于 2013-05-17T14:22:38.357 に答える