Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 是否使用重复键但值不同的映射?_Java_Collections - Fatal编程技术网

Java 是否使用重复键但值不同的映射?

Java 是否使用重复键但值不同的映射?,java,collections,Java,Collections,是否有任何方法可以使用map或任何其他允许我们存储重复密钥的集合 具有不同的值… 而不是使用列表为同一个键存储多个值 贴图不允许您拥有重复的密钥。这甚至没有道理 可能的解决方案是将值的列表(集合)。试试看。如果有什么事情阻止你,请告诉我们。地图不允许你有重复的钥匙。这甚至没有道理 可能的解决方案是将值的列表(集合)。去做吧。如果有什么事阻止你,请告诉我们。下一个呢 Map<String, List<String>> map = new HashMap<>();

是否有任何方法可以使用map或任何其他允许我们存储重复密钥的集合
具有不同的值…

而不是使用列表为同一个键存储多个值

贴图不允许您拥有重复的密钥。这甚至没有道理


可能的解决方案是将
值的
列表
(集合)
。试试看。如果有什么事情阻止你,请告诉我们。

地图不允许你有重复的钥匙。这甚至没有道理

可能的解决方案是将
值的
列表
(集合)
。去做吧。如果有什么事阻止你,请告诉我们。

下一个呢

Map<String, List<String>> map = new HashMap<>();
Map Map=newhashmap();
增加价值
//添加“key1”和“value1”
如果(!map.containsKey(“key1”)){
put(“key1”,newarraylist());
}
映射。获取(“键1”)。添加(“值1”);
//添加“键1”和“值2”
如果(!map.containsKey(“key1”)){
put(“key1”,newarraylist());
}
映射。获取(“键1”)。添加(“值2”);
获取价值
List values=map.get(“key1”);

此选项包含字符串,但可用于任何类型。您不需要额外的库。

下一个呢

Map<String, List<String>> map = new HashMap<>();
Map Map=newhashmap();
增加价值
//添加“key1”和“value1”
如果(!map.containsKey(“key1”)){
put(“key1”,newarraylist());
}
映射。获取(“键1”)。添加(“值1”);
//添加“键1”和“值2”
如果(!map.containsKey(“key1”)){
put(“key1”,newarraylist());
}
映射。获取(“键1”)。添加(“值2”);
获取价值
List values=map.get(“key1”);


此选项包含字符串,但可用于任何类型。而且您不需要额外的库。

使用Google Guava的MultiMap。这允许使用单个键使用多个值


使用谷歌番石榴的多重地图。这允许使用单个键使用多个值


有一个
多地图
概念。例如番石榴

但它不是集合框架的一部分

如果您不希望像这样的签名
映射
,您可以很容易地用object将其包装起来。例如

class Items {
   private List<Item> items;
   public void add(Item i) {}
}
类项目{
私人清单项目;
公共空白添加(项目一){}
}

当然,不可能通过map实例将项目添加为
map。add(“key”,item)

有一个
多映射的概念。例如番石榴

但它不是集合框架的一部分

如果您不希望像这样的签名
映射
,您可以很容易地用object将其包装起来。例如

class Items {
   private List<Item> items;
   public void add(Item i) {}
}
类项目{
私人清单项目;
公共空白添加(项目一){}
}

当然,不可能通过map实例将项目添加为
map.add(“key”,item)
您可以使用apache commons集合中的MultiMap


您可以使用apache commons集合中的MultiMap


Map
绝对是正确的选择。我不知道这一点。如果该键指向多个值,您将如何查找该键的值?我认为最好的问题是。当您调用
map.get(key)
时,该映射包含多个
key
。您希望返回什么?实现您自己的映射,但我看不出其中的含义。你所寻找的东西背后的逻辑是什么,带键和列表的地图无法提供?你能稍微看看你所面临的场景吗,这让你有了这个需求
Map
绝对是正确的选择。我不知道。如果该键指向多个值,您将如何查找该键的值?我认为最好的问题是。当您调用
map.get(key)
时,该映射包含多个
key
。您希望返回什么?实现您自己的映射,但我看不出其中的含义。你所寻找的东西背后的逻辑是什么,带有键和列表的映射无法提供?你能稍微看一下你所面临的场景吗,这会让你有这个需求+1,但是OP应该意识到这实际上是
,而不是使用列表来存储同一个键的多个值?
+1,但是OP应该意识到,这实际上是
而不是使用一个列表来存储同一个键的多个值?
好的,使用具有同一个键的值的列表的方法,只是想知道是否有比这更好的方法..不确定“任何方法更好”;这听起来确实是正确的方法。不过,根据上下文的不同,地图有时可能会更好。价值的顺序重要吗?是否有(任何给定密钥的)副本?有时,使用TreeSet(自然顺序)或LinkedHashSet(插入顺序)可能也很有用。@Paul理解您的意图:)在某种意义上的值列表,为单个键提供一组值。选择集合是下一步+1.好主意。OP Pankaj的第一个疑问是是否要收集。好的,使用具有相同键的值列表的方法,只是想知道是否有比此更好的方法。不确定“任何更好的方法”;这听起来确实是正确的方法。不过,根据上下文的不同,地图有时可能会更好。价值的顺序重要吗?是否有(任何给定密钥的)副本?有时,使用TreeSet(自然顺序)或LinkedHashSet(插入顺序)可能也很有用。@Paul理解您的意图:)在某种意义上的值列表,为单个键提供一组值。选择集合是下一步+1.好主意。OP Pankaj的第一个疑问是是否要收藏。