HashMap 允许重复吗?
Posted
技术标签:
【中文标题】HashMap 允许重复吗?【英文标题】:HashMap allows duplicates? 【发布时间】:2013-12-30 12:48:08 【问题描述】:我对 HashMap 有疑问,我们都知道 HashMap 允许一个空键和值对,我的问题是
如果我这样写,
m.put(null,null);
m.put(null,a);
它会抛出(错误或异常)还是会覆盖该值或返回的值是什么??
【问题讨论】:
你为什么不试试? 结账集合 API。 Null 始终是键的错误选择。所以看看你想做什么。在两个相等键的情况下,第一个 on 的值将被当前替换。 检查:***.com/questions/1669885/… 【参考方案1】:Hashmap 类型 如果 hashmap 键是相同的键,则覆盖该键
map.put("1","1111");
map.put("1","2222");
输出
key:value
1:2222
【讨论】:
【参考方案2】:HashMap 中的每个 key 必须是唯一的。
当“添加重复键”时,旧值(对于同一个键,因为键必须是唯一的)被简单地替换;见HashMap.put:
将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,旧值将被替换。
返回与 key 关联的先前值,如果没有 key 映射,则返回 null。
就空值而言:允许单个空 key(因为键必须是唯一的)但 HashMap 可以有任意数量的空 值,以及一个空键不必有空值。根据documentation:
[..HashMap] 允许 null values 和 [a] null key.
但是,文档没有说明 null/null 需要是特定的键/值对或 null/"a" 无效。
【讨论】:
【参考方案3】:在某种意义上不允许重复,它允许添加你,但它不关心这个键是否已经有一个值。所以目前one key只会有one value
它以静默方式覆盖 value
的 null
键。也不例外。
当您尝试获取时,将返回最后插入的带有null
的值。
这不仅适用于null
,也适用于任何键。
举个例子
Map m = new HashMap<String, String>();
m.put("1", "a");
m.put("1", "b"); //no exception
System.out.println(m.get("1")); //b
【讨论】:
【参考方案4】:代码示例:
HashMap<Integer,String> h = new HashMap<Integer,String> ();
h.put(null,null);
h.put(null, "a");
System.out.println(h);
输出:
null=a
It overrides the value at key null.
【讨论】:
【参考方案5】:HashMap 不允许重复键,但由于它不是线程安全的,因此可能会出现重复键。 例如:
while (true)
final HashMap<Object, Object> map = new HashMap<Object, Object>(2);
map.put("runTimeType", 1);
map.put("title", 2);
map.put("params", 3);
final AtomicInteger invokeCounter = new AtomicInteger();
for (int i = 0; i < 100; i++)
new Thread(new Runnable()
@Override
public void run()
map.put("formType", invokeCounter.incrementAndGet());
).start();
while (invokeCounter.intValue() != 100)
Thread.sleep(10);
if (map.size() > 4)
// this means you insert two or more formType key to the map
System.out.println( JSONObject.fromObject(map));
【讨论】:
【参考方案6】:m.put(null,null); // here key=null, value=null
m.put(null,a); // here also key=null, and value=a
hashmap 中不允许有重复的键。 但是,值可以重复。
【讨论】:
以上是关于HashMap 允许重复吗?的主要内容,如果未能解决你的问题,请参考以下文章
HashMap,LinkedHashMap,TreeMap的区别(转)
HashMap,LinkedHashMap,TreeMap的区别(转)