-1

HashMap私は自分のコードに従って作成しました...

HashMap map=new HashMap();//HashMap key random order.
map.put("Amit","Java");
map.put("Saral","J2EE");
map.put("Saral","Andriod");//same key but different value 
map.put("Nitin","PHP");
map.put("hj","Spring1");
System.out.println("There are "+map.size()+" elements in the map.");
System.out.println("Content of Map are...");
Set s=map.entrySet();

Iterator itr=s.iterator();
while(itr.hasNext()){
    Map.Entry m=(Map.Entry)itr.next();
    System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
    }

このコードを実行すると、の値はkey=SaralですAndroid。このキーの以前の値を取得する方法はありますJ2EEか?

4

5 に答える 5

5

いいえ、標準ではそれはできませんHashMap。ただし、最も簡単な解決策は、マップに as 値を格納することListです。その後、複数のアイテムをリストに追加できます (一般的なコレクションも使用する必要があります)。簡単にするために、次のようなヘルパー メソッドを使用できます。

void addToMap(Map<String, List<String>> map, String key, String value) {
  List<String> list = map.get(key);

  if (list == null) {
    list = new ArrayList<String>();
    map.put(key, list);
  }
  list.add(value);
}

Map<String, List<String>> map = new HashMap<String, List<String>>();
addToMap(map, "Amit", "Java");
addToMap(map, "Saral", "J2EE");
addToMap(map, "Saral", "Andriod");//same key but different value 
addToMap(map, "Nitin", "PHP");
addToMap(map, "hj", "Spring1");
...

ここでのヘルパー メソッドは単なる例です。完全で堅牢な実装には、許可するかどうかに応じて、重複値のチェックなどを含める必要がある場合があります。そうでない場合は、 のSet代わりにa を使用することをお勧めしますList

アップデート

このマップの内容を出力するには、埋め込みループを使用して、各マップ エントリの値のリストを反復処理する必要があります (イテレータの代わりに foreach ループを使用できます)。

for (Map.Entry<String, List<String>> m : map.entrySet())
{
  for (String v : m.getValue())
  {
    System.out.println(m.getKey()+"\t"+v+"\t"+ m.hashCode());
  }
}
于 2012-04-17T16:05:28.223 に答える
1

Mapには、キーごとに最大 1 つのエントリを含めることができるため、 を呼び出すとmap.put("Saral","Andriod")、古い"J2EE"値が削除されます。キーごとに複数の値をサポートするには、Map<String, List<String>>または Guava のようなマルチマップ実装を維持する必要がありますMultimap

補足として、コンパイル時のタイプ セーフのためMap<String, String>に、 、 などのジェネリックの使用を開始することをお勧めします。Iterator<String>

于 2012-04-17T16:07:05.247 に答える
0

他の人が言ったように、これは標準のマップでは機能しません。ただし、Google のGuavaMultiMapインターフェイスを提供しており、これを使用して単一のキーで複数の値を格納できます。

使用例:

Multimap<String,String> multiMap = ArrayListMultimap.create();
multiMap.put("color", "red");
multiMap.put("color", "blue");
System.out.println(multiMap.get("color")); //returns a ["red', "blue"] list
于 2012-04-17T16:12:56.843 に答える
0

古い値は上書き (置き換え) されます。1 つの一意のキーに対して 1 つのマッピング (エントリ) のみが存在します。そのため、もう存在しないため、取得することはできません。

于 2012-04-17T16:05:23.863 に答える
0

MapJava が提供する標準実装では、これを行うことはできません。ただし、MultiMap の実装があります (それは基本的にあなたが求めているものです)。

1 つの例は、Google からのものです: http://google-collections.googlecode.com/svn/trunk/javadoc/index.html?com/google/common/collect/Multimap.html

この 1 つのインターフェイスだけを取得することはできないことに注意してください。それと共にいくつかのクラスが必要になります。

于 2012-04-17T16:07:26.580 に答える