我对HashMap有疑问,因为我们都知道HashMap允许一个空键和值对,我的问题是
如果我这样写,
m.put(null,null);
m.put(null,a);
它会抛出(错误或异常)还是会覆盖该值或者什么是returing的值?
答案 0 :(得分:26)
Hashmap类型如果hashmap键是相同的键,则覆盖该键
map.put("1","1111");
map.put("1","2222");
输出
key:value
1:2222
答案 1 :(得分:10)
HashMap中的每个密钥必须是唯一的。
当“添加重复的密钥”时,旧的值(对于相同的密钥,因为密钥必须是唯一的)被简单地替换;见HashMap.put:
将指定的值与此映射中的指定键相关联。如果地图以前包含该键的映射,则将替换旧值。
返回与键关联的先前值,如果没有键映射,则返回null。
就null而言:允许单个null 键(因为键必须是唯一的),但HashMap可以有任意数量的null 值和一个null键不需要空值。根据{{3}}:
[.. HashMap]允许空值和[a] null 键。
但是,文档说 nothing 关于null / null需要是特定的键/值对或null /“a”无效。
答案 2 :(得分:9)
代码示例:
HashMap<Integer,String> h = new HashMap<Integer,String> ();
h.put(null,null);
h.put(null, "a");
System.out.println(h);
输出:
{null=a}
答案 3 :(得分:8)
在某种意义上不允许重复,它允许添加你,但它不关心这个键已经有一个值。所以目前一个键只有一个值
它会默默覆盖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
,也适用于任何密钥。
快速举例
{{1}}
答案 4 :(得分:3)
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));
}
}
答案 5 :(得分:0)
m.put(null,null); // here key =null
m.put(null,a);/here also key=null
哈希图中不允许重复的键。
但是,值可以重复。