如何在java的HashMap中打印一个键的所有值
` 对于上面的映射,我希望获得与键1关联的所有值。预期产出 键::1值为::xyz、abc、cde如何在java的HashMap中打印一个键的所有值,java,hashmap,Java,Hashmap,` 对于上面的映射,我希望获得与键1关联的所有值。预期产出 键::1值为::xyz、abc、cde 值的顺序并不重要。在映射中,键应始终是唯一的。如果将新值与现有项关联,它将覆盖现有项的值 您可能需要检查接口中的方法 如果映射以前包含键的映射,则旧值 由指定的值替换 因此,在您的情况下,映射将始终使用cde作为键1的值。这是不可能的,映射称为映射,因为它将一个键值映射为一个值。多个关键点可以映射到同一个值,但不能反过来映射 您可能需要的是映射到列表的映射: 用于添加的助手函数可能比较方便 fin
值的顺序并不重要。在映射中,键应始终是唯一的。如果将新值与现有项关联,它将覆盖现有项的值 您可能需要检查接口中的方法 如果映射以前包含键的映射,则旧值 由指定的值替换
因此,在您的情况下,映射将始终使用cde作为键1的值。这是不可能的,映射称为映射,因为它将一个键值映射为一个值。多个关键点可以映射到同一个值,但不能反过来映射 您可能需要的是映射到列表的映射: 用于添加的助手函数可能比较方便
final Map<String, List<String>> map = new HashMap<>();
if (map.get("1") == null) {
map.put("1", new ArrayList<String>());
}
map.get("1").add("xyz");
// ...
在地图中,不能有重复的关键点。因此,在您的案例中,为键1设置最终值。cde将保留在地图中
你可以做一些事情,如跟随,以实现你的期望
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 Map=新的HashMap 要从中列出值,您可以执行此操作
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"));
请注意,若要向其中添加一些值,必须首先检查密钥是否已存储,若未存储,则首先声明一个集合
for(String valueOfKey : map.get("key") {
//print or something else
}
由于这是众所周知的设计,您可能会对guava框架和
这个类的好处是它已经实现了如何从中添加和检索值的逻辑。哈希映射不能有重复的键,请参见下面的S.O了解映射不能有重复的键
如果你想实现你所描述的问题。首先,你需要使用你所做的是错误的 地图不允许重复 所以一个键------->一个值 在此映射可选操作中将指定的值与指定的键相关联。如果映射以前包含键的映射,则旧值将替换为指定值。当且仅当m.containsKeyk返回true时,称映射m包含密钥k的映射 您可以打印每个键和值的值,如
HashMap::put覆盖与键关联的旧值。您必须在每个映射条目中放置一个列表,并在相应的列表中插入新值。使用多重映射
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());
}
输出:映射:{2=[err],1=[xyz,abc,cde]}来自java文档中关于.putK键,V值方法: 将指定的值与此映射中的指定键相关联。如果映射以前包含键的映射,则替换旧值
所以你不能这么做。你可以这样做:
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);
这将在HashMap中打印密钥,但不保证顺序 如果你需要一个双重密钥,甚至不知道你为什么要这样做,重新考虑使用另一个集合。你可能想要一个多重映射-首先你需要理解HashMap的概念,它的内部生命。我鼓励你涵盖所有这些事情的解释!
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());
}
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);
for (String k : map.keySet())
System.out.println(k);