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
值的顺序并不重要。
在 Map 中,键应始终为unique
. 如果将新值关联到现有键,它将覆盖现有条目的值。
您可能需要检查Map#put(K, V)方法的接口。
如果映射先前包含键的映射,则旧值将替换为指定值。
因此,在您的情况下,您的地图将始终"cde"
作为 key 的值"1"
。
使用多图
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]}
地图不能有重复的键。
如果你想实现你所描述的问题。首先你需要使用多图
你在做什么是错误的。
地图不允许重复。
所以 一键----------->一个值
将指定值与此映射中的指定键关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值。(当且仅当 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());
}
这是不可能的,映射之所以称为映射,是因为它将一个键值映射到一个值。多个键可以映射到相同的值,但反之则不行。
您可能想要的是映射到 a 的地图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);
}
在Map 你不能有重复的键。所以在你的情况下,为键 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"));
你不能用这种类型的地图做到这一点。map 中的键必须是唯一的。
为此,您应该声明一个映射,其中键是字符串,但值是字符串的集合。
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");
由于这是众所周知的设计,您可能对 guava 框架和Multimap感兴趣
这个类的好处是它已经实现了如何从中添加和检索值的逻辑。
HashMap::put 覆盖与键关联的旧值。您必须在每个地图条目中放置一个列表,并在适当的列表中插入新值。
您可以执行以下操作:
for (String k : map.keySet())
System.out.println(k);
这将打印 中的键HashMap
,但对订单没有任何保证。
您不能有哈希映射的重复键,请参阅下面的 SO,了解 HashMap 中的重复键会发生什么