Java 如何在HashMap中包含重复键?

Java 如何在HashMap中包含重复键?,java,Java,我需要在关键点集中链接和多个关键点。我试过这个: LinkedHashMap<Integer, String> map = new LinkedHashMap< Integer,String>(); map.put( -1505711364,"4"); map.put(294357273, "15"); map.put(-1593134417, "28"); map.put(-1231165758, "45"); map.put(121046798, "58"); ma

我需要在关键点集中链接和多个关键点。我试过这个:

LinkedHashMap<Integer, String> map = new LinkedHashMap< Integer,String>();

map.put( -1505711364,"4");
map.put(294357273, "15"); map.put(-1593134417, "28"); map.put(-1231165758, "45");
map.put(121046798, "58");
map.put(294357273, "71"); map.put(-1593134417, "82"); map.put(-1231165758, "95");
map.put(121046798, "108");
LinkedHashMap=newlinkedhashmap();
地图放置(-1505711364,“4”);
地图放置(294357273,“15”);地图放置(-1593134417,“28”);地图出售(-1231165758,“45”);
地图放置(121046798,“58”);
地图放置(294357273,“71”);地图放置(-1593134417,“82”);地图出售(-1231165758,“95”);
地图放置(121046798,“108”);
我需要保留顺序的重复钥匙。有什么方法可以做到这一点???

使用
Map

Map Map=newlinkedhashmap();
map.put(-1505711364,新的ArrayList(Arrays.asList(“4”));
map.put(294357273,新的ArrayList(Arrays.asList(“15”,“71”)));
//...
要在此映射中添加新的键/值对,请执行以下操作:

public void add(Integer key, String newValue) {
    List<String> currentValue = map.get(key);
    if (currentValue == null) {
        currentValue = new ArrayList<String>();
        map.put(key, currentValue);
    }
    currentValue.add(newValue);
}
public void add(整数键,字符串newValue){
List currentValue=map.get(键);
if(currentValue==null){
currentValue=新的ArrayList();
map.put(键、当前值);
}
currentValue.add(newValue);
}

地图中不能有重复的键。您可以创建一个
地图
,或者如果可以,使用

Multimap Multimap=ArrayListMultimap.create();
multimap.put(1,“rohit”);
多重映射put(1,“jain”);
System.out.println(multimap.get(1));//印刷品-[rohit,jain]

然后可以使用该方法获取
java.util.Map

Map
不支持重复键。您可以对同一个键使用集合作为值

将指定值与此映射中的指定键相关联 (可选操作)。如果映射以前包含的映射 键时,旧值将替换为指定的值

您可以根据需要使用任何类型的
列表
设置
实现

如果您的值可能也是重复的,您可以使用
ArrayList
LinkedList
,如果值是唯一的,您可以使用
HashSet
TreeSet


在中,它也是一个将键映射到值的集合,类似于Map,但其中每个键可能与多个值关联。可以将多重映射的内容可视化为从键到非空值集合的映射:

a → 1, 2
b → 3  
范例-

ListMultimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("a", "1");
multimap.put("a", "2");
multimap.put("c", "3");
ListMultimap multimap=ArrayListMultimap.create();
多重映射put(“a”、“1”);
多重映射put(“a”、“2”);
多重映射put(“c”、“3”);

哈希映射
不能有重复的键。也就是说,您可以使用列表值创建地图:

Map<Integer, List<String>>
Map

但是,使用这种方法会影响性能

HashSet支持此功能吗?不支持。HashSet不支持。您将如何使用键从此多重映射中删除?
多重映射#删除所有(对象键)
-删除与键关联的所有值
Multimap#remove(对象键,对象值)
-从这个Multimap中删除一个带有键和值的键值对(如果存在)。如果multimap中的多个键值对符合此描述,则未指定删除哪一个。插入顺序会保留在此描述中吗???@vijji尝试一下不会有什么坏处:)使用
ArrayListMultimap
不会保留键插入顺序;您可能需要
LinkedListMultimap
@LouisWasserman。但是ArrayListMultimap文档的第二行是什么意思?另外,当我尝试插入不同的键时,它会按插入顺序发出键。我遗漏了什么吗?@RohitJain:1)意思是给定键的值按插入顺序保存,但键本身可能不按插入顺序保存
ArrayListMultimap
类似于
HashMap
,而不是
LinkedHashMap
。幸运的是,您的测试数据保留了插入顺序。然后要为现有键添加值,需要
get
concatenate
,和
put
,对吗?@PM77-1只需
get
列表
并调用
List
并添加(newstring)
@PM77-1我已经更新了答案来说明这一点。谢谢。为什么要编写
Arrays.asList(新字符串[]{“15”,“71”})
而不是
Arrays.asList(“15”,“71”)
?@Radhwen因为该值是一个可变列表,所以只需更新列表的状态即可。如果列表是不可变的(就像以前一样),那么在这种情况下,您需要通过更新该键中的值来更新映射。
ListMultimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("a", "1");
multimap.put("a", "2");
multimap.put("c", "3");
Map<Integer, List<String>>