我正在尝试仅为研究数据结构解决分析问题。我怀疑是Java中的HashTable
。
我有一个HashMap
HashMap<String, Integer> map = new HashMap<>();
这个HashMap
没有更少的密钥,但是,其中一些密钥是重复的。
map.put('k', 1);
map.put('k', 2);
依旧......
我的问题是当我要删除HashMap的一个键时。其中一些密钥也是重复的。
让我们看看。
map.remove('k');
我想在这种情况下,它将使用键'k'删除所有值,或者只删除它找到的第一个值。
在这种情况下会发生什么?我有点困惑。
感谢您的帮助!!
答案 0 :(得分:3)
在HashMap
(或HashTable
)中,您只能拥有 UNIQUE KEYS ,您不能将不同的值分配给同一个键。在您的代码中,您尝试使用相同的密钥放置2个不同的值:
map.put('k', 1);
map.put('k', 2);
猜猜是什么,将不会有2个条目,但只有1个,最后一个, REPLACE 上一个,因为它们具有相同的键 - 'k' 。因此,map.remove('k');
将删除所有,这只是一个条目,而不是两个。
答案 1 :(得分:1)
您要问的有很多事情。让我们回答所有问题。
HashTable与HashMap不同。但是,hashTable与HashMap非常相似。它们之间最大的区别在于,在HashTable中,每个方法都是同步的,这使得读/写成本极高。 HashMap的方法不同步。 HashTable或多或少已经过时,编写新代码的人应该避免使用HashTable。
在HashMap中,键始终是唯一的。即,不能有2个条目具有相同的密钥。在您的示例中,
map.put(&#39; k&#39;,1);
这将在地图中创建一个条目,其键是&#39; k&#39;价值是1.
然后,你做
var arr = [1,2,3,4];
arr.reduce(function(acc,val){
if(val >= 2){
acc['the key num ' + val + ' is'] = val;
}
return acc;
},{});
这不会创建另一个带有键&#39; k&#39;和值2.这将覆盖第一个条目本身的值。所以,你只会有一个关键词&#39; k&#39;其值现在为2(而不是1)
现在,我想理解remove()会很容易。当您删除(密钥)时,会尝试删除该密钥的仅条目。
答案 2 :(得分:0)
在HashMap中,密钥将是唯一的,因此它不会添加多次密钥K.当你删除键&#34; K&#34; ,它会删除唯一的密钥&#39; K&#39;来自哈希表。
答案 3 :(得分:0)
根据定义,Java中的HashMap
唯一地存储所有键。
简单地说,当我们尝试使用相同的键放置更多条目时,它将覆盖先前为该键定义的值。因此,在为该键添加多个值后删除键意味着该键将不再存在于HashMap
中。
有关详情,请参阅文档here。
答案 4 :(得分:0)
使用
map.putIfAbsent('k',2);
代替
map.put('k', 2);