Map<String, String> map = new HashMap<String, String>();
我知道地图的内部工作。如果两个键的哈希码相同,则会发生冲突,并将其存储在链表中。但是如果再次输入该键怎么办。
对此有任何检查吗?还是会简单地替换该值而不检查?
详细说明
map.put("sparsh", "sparsh");
map.put("sparsh", "1");
它将值“ sparsh”替换为“ 1”
map.put("sparsh", "1");
map.put("sparsh", "1");
在上述情况下,会发生什么替换?
以及与上述问题不同的上下文
System.out.println(map.put("sparsh", "sparsh"));
System.out.println(map.put("sparsh", "1"));
首先给我“ null”,然后给我“ sparsh”(键)。如果有人对此有所了解,其背后的原因是什么。
答案 0 :(得分:3)
看跌合约为:
在您的情况下,您无法观察到“输入”新值或保留旧值之间的区别。具有两个值的两个字符串始终相等,因此无论如何都没有关系。
但是然后:您可以轻松地构造一个示例(使用具有两个字段的类),其中两个对象等于,但是具有不同的值(因为两个字段中的一个仅用于equals()
实现)。
因此,新值必须进入地图,即使它与已经存在的值等于也是如此。
答案 1 :(得分:3)
摘自Map::put
的文档:
V put(K key, V value)
返回值: 与键关联的先前值,,如果存在则返回null 没有键的映射。 (返回null也可以表示该地图 如果实现支持,先前与null关联的键 空值。)
将条目添加到地图时:
以下是带有多个看跌期权的示例:
System.out.println(map.put("key", "v1")); // null
System.out.println(map.put("key", "v2")); // v1
System.out.println(map.put("key", "v3")); // v2
System.out.println(map.put("key2", "v4")); // null
答案 2 :(得分:1)
java.util.Map.put(key, value)返回与同一键关联的先前值。
因此,最初,没有与键相关联的值,因此第一个map.put("sparsh", "sparsh")
返回null。
然后,由于地图中有key: sparsh, value: sparsh
,因此调用map.put("sparsh", "1")
将返回先前的值,如"sparsh"