【发布时间】:2017-03-29 07:27:14
【问题描述】:
假设在 java 集合的哈希映射中已经有一对 0,"Ram",我添加了一个具有相同键的新对 0,"Sham"。我知道它会覆盖该值,最后我们得到哈希集中的 0,“Sham”。 我的问题是为什么“Sham”即较新的元素会覆盖“Ram”即先前的元素?是否有任何功能可以阻止这种覆盖,或者我应该使用 if-else 条件来检查它?
【问题讨论】:
标签: collections hashmap key overriding
假设在 java 集合的哈希映射中已经有一对 0,"Ram",我添加了一个具有相同键的新对 0,"Sham"。我知道它会覆盖该值,最后我们得到哈希集中的 0,“Sham”。 我的问题是为什么“Sham”即较新的元素会覆盖“Ram”即先前的元素?是否有任何功能可以阻止这种覆盖,或者我应该使用 if-else 条件来检查它?
【问题讨论】:
标签: collections hashmap key overriding
您可以使用委托技术编写自己的 put 方法,如果 map 中已经存在任何值,则忽略 put 的调用并返回 false 状态。
boolean putIfNotPresent(Map map, Object key, Object value){
if(map.get(key)==null){
map.put(key, value);
return true;
}else{
return false;
}
}
为什么默认值会被覆盖 :
它全都与功能的用例有关。 Java 实现了最常见的用例。并且有任何特定用例的选项。
【讨论】: