hashmap的key可以重复吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hashmap的key可以重复吗相关的知识,希望对你有一定的参考价值。

如果重复添加的话,hashmap会自动覆盖key一样的数据,保证一个key对应一个value

也就是说,你只要把一个map2里的数据按照key一个一个都加到map1里去就行了,但是这样会破坏map1
如果是想保持原来的不变,可以先新建一个空的hashmap,把map1和map2的数据都加进去就可以了

HashMap map3 = new HashMap();
for (Object key : map1.keySet())
map3.put(key, map1.get(key));
for (Object key : map2.keySet())
map3.put(key, map2.get(key));
可以根据具体的类型加上泛型模板
参考技术A 这个问题很好回答,key肯定是不能重复,如果两个value的key相同,到时候就无法准确读取value值了

本质上相同不代表“表面上”不可以相同,下面请看“表面上”相同key但是不同value的例子

class A
private String code;
private String name;
@Override
public int hashCode()
// TODO Auto-generated method stub
return code.hashCode()+name.hashCode();

public String getCode()
return code;

public void setCode(String code)
this.code = code;

public String getName()
return name;

public void setName(String name)
this.name = name;

@Override
public String toString()
// TODO Auto-generated method stub
return code.toString()+name.toString();



public static void testHashMap()
Map<A,String> map = new HashMap<A,String>();
A a1 = new A();
a1.setCode("123");
a1.setName("456");
map.put(a1, "test1");
System.out.println(map);
a1.setCode("789");
map.put(a1, "test2");
System.out.println(map);

输出结果
123456=test1
789456=test1, 789456=test2
会发现“表面上”是相同的,出现这种结果本质原因是在于tostring方法的转化,但是它们在hashmap数据结构中hashcode是不一样,所以对应的key也是不一样的。

Java数据结构系列——HashMap的常见方法

1、V put(K key, V value)

向map集合中添加Key为key,Value为value的元素,当添加成功时返回null,否则返回value。

就是说Map集合中的Key是不能重复的,这就类似于Set集合中元素不能重复,但是Map集合中的Value是可以重复

 2、void putAll(Map<extends K, extends V> m)

向map集合中添加指定集合的所有元素

3、void clear()

把map集合中所有的键值删除

4、boolean containsKey(Object key)

检出map集合中有没有包含Key为key的元素,如果有则返回true,否则返回false。

5、boolean containsValue(Object value)

检出map集合中有没有包含Value为value的元素,如果有则返回true,否则返回false。

6、Set<Map.Entry<K,V>> entrySet()

返回map到一个Set集合中,以map集合中的Key=Value的形式返回到set中。

补充:一般我们遍历HashMap的时候,推荐是用这种方式。不用再通过map的get(key)方法拿值,性能会提升。参考sonar代码规范

7、boolean equals(Object o)

判断两个Set集合的元素是否相同

8、V get(Object key)

根据map集合中元素的Key来获取相应元素的Value

9、int hashCode()

返回map集合的哈希码值

10、boolean isEmpty()

检出map集合中是否有元素,如果没有则返回true,如果有元素则返回false

11、Set<KkeySet()

返回map集合中所有Key

12、V remove(Object key)

删除Key为key值的元素

13、int size()

返回map集合中元素个数

14、Collection<Vvalues()

返回map集合中所有的Value到一个Collection集合

以上是关于hashmap的key可以重复吗的主要内容,如果未能解决你的问题,请参考以下文章

java map key可以重复吗

java map的key可以重复吗

unordered map的key能重复么

map的key可以为null吗

hashmap中不同的key可以指向相同的value吗

如何在Java中对HashMap进行排序[重复]