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<K> keySet()
返回map集合中所有Key
12、V remove(Object key)
删除Key为key值的元素
13、int size()
返回map集合中元素个数
14、Collection<V> values()
返回map集合中所有的Value到一个Collection集合
以上是关于hashmap的key可以重复吗的主要内容,如果未能解决你的问题,请参考以下文章