我有下面的树图代码,我存储了重复的密钥,它似乎覆盖了现有密码。
TreeMap<String, Integer> tm=new TreeMap<>();
tm.put("vivek", 1);
tm.put("vivek", 2);
System.out.println(tm);
它打印{vivek=2}
所以它意味着map允许在密钥的基础上覆盖?
答案 0 :(得分:13)
所有地图共享相同的基本属性,其中之一是所有键必须是唯一的。因此,为什么keySet()
会返回Set
。
要做你想要的东西,你需要一个Multimap--它本质上是一个List to List。
Map<Integer, List<String>> multiMap;
要添加对象,请获取该键的列表,如果为null,则添加列表,然后将值添加到列表中,否则只需将值添加到现有列表中。
在各种第三方库中都有一些多图表实现,或者很容易实现自己的。
答案 1 :(得分:12)
TreeMap#public V put(K key, V value)
API说
将指定的值与此映射中的指定键相关联。 如果地图以前包含该键的映射,则替换旧值。