Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java的HashMap中打印一个键的所有值_Java_Hashmap - Fatal编程技术网

如何在java的HashMap中打印一个键的所有值

如何在java的HashMap中打印一个键的所有值,java,hashmap,Java,Hashmap,` 对于上面的映射,我希望获得与键1关联的所有值。预期产出 键::1值为::xyz、abc、cde 值的顺序并不重要。在映射中,键应始终是唯一的。如果将新值与现有项关联,它将覆盖现有项的值 您可能需要检查接口中的方法 如果映射以前包含键的映射,则旧值 由指定的值替换 因此,在您的情况下,映射将始终使用cde作为键1的值。这是不可能的,映射称为映射,因为它将一个键值映射为一个值。多个关键点可以映射到同一个值,但不能反过来映射 您可能需要的是映射到列表的映射: 用于添加的助手函数可能比较方便 fin

`

对于上面的映射,我希望获得与键1关联的所有值。预期产出

键::1值为::xyz、abc、cde


值的顺序并不重要。

在映射中,键应始终是唯一的。如果将新值与现有项关联,它将覆盖现有项的值

您可能需要检查接口中的方法

如果映射以前包含键的映射,则旧值 由指定的值替换


因此,在您的情况下,映射将始终使用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);