Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
`
对于上面的地图我想获得与密钥相关的所有值1.预期输出。
Key :: 1个值是:: xyz,abc,cde
值的顺序并不重要。
答案 0 :(得分:7)
在地图中,密钥应始终为unique
。如果将新值与现有键关联,则它将覆盖现有条目的值。
您可能需要检查Map#put(K, V)方法的界面。
如果地图以前包含该键的映射,则为旧值 被指定的值替换。
因此,在您的情况下,您的地图将始终以"cde"
作为密钥"1"
的值。
答案 1 :(得分:6)
使用MultiMap
MultiMap mapValue = new MultiValueMap();
mapValue.put("1", "xyz");
mapValue.put("1", "abc");
mapValue.put("1", "cde");
mapValue.put("2", "err");
System.out.println("Map : " + mapValue);
输出:Map : {2=[err], 1=[xyz, abc, cde]}
答案 2 :(得分:4)
地图不能有重复的密钥。
如果您想实施您所描述的内容。首先,您需要使用multimaps
答案 3 :(得分:1)
你在做什么是错的。
地图不允许重复。
所以一把钥匙-----------&gt;一个值
将指定的值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定的值。 (当且仅当m.containsKey(k)返回true时,地图m才包含密钥k的映射。)
您可以打印每个key
和value
的值
Ex:
Map<String, String> map = new HashMap<String, String>();
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
答案 4 :(得分:0)
这是不可能的,地图称为地图,因为它将一个键值映射到一个值。多个键可以映射到相同的值,但不能相反。
您可能想要的是一张映射到List<String>
的地图:
final Map<String, List<String>> map = new HashMap<>();
if (map.get("1") == null) {
map.put("1", new ArrayList<String>());
}
map.get("1").add("xyz");
// ...
用于添加的辅助函数可能很方便
public static <K, V> void add(final K key, final V value, final Map<K, List<V>> map)
{
if (map.get(key) == null) {
map.put(key, new ArrayList<V>());
}
map.get(key).add(value);
}
答案 5 :(得分:0)
在地图中,您无法拥有重复的密钥。所以在你的情况下,为密钥1输入最终值。“cde”将保留在Map
中你可以做一些像跟随你想要的事情
Map<String, List<String>> map = new HashMap<>();
List<String> list=new ArrayList<>();
List<String> list1=new ArrayList<>();
list.add("xyz");
list.add("abc");
list.add("cde");
list1.add("err");
map.put("1", list);
map.put("2",list1);
System.out.println(map.get("1"));
答案 6 :(得分:0)
使用此类地图无法执行此操作。地图中的关键字必须是唯一的。
为了能够做到这一点,你应该声明一个地图,其中key是字符串,但值是字符串的集合。
Map<String,Collection<String>> map = new HashMap<String,Collection<String>>();
要列出的值,您可以执行此操作
for(String valueOfKey : map.get("key") {
//print or something else
}
请注意,要向其添加一些值,您必须先检查该密钥是否已存储,如果没有,则先声明一个集合。
if(map.contains("key") == false) {
map.put(new ArrayList<String>());
}
map.get("key").add("value");
由于这是众所周知的设计,您可能对番石榴框架和Multimap
感兴趣这个类的好处是它已经实现了如何从中添加和检索值的逻辑。
答案 7 :(得分:0)
HashMap :: put会覆盖与密钥关联的旧值。您必须在每个映射条目中放置一个List,并在适当的列表中插入新值。
答案 8 :(得分:0)
答案 9 :(得分:0)
您可以执行以下操作:
for (String k : map.keySet())
System.out.println(k);
这将打印HashMap
中的密钥,但没有任何订单保证。
答案 10 :(得分:-1)
您不能拥有哈希映射的重复键,请参阅下面的S.O代表What happens for duplicate keys in HashMap