使用HashMap的问题

时间:2018-03-24 17:05:24

标签: java collections hashmap hashtable

我正在尝试仅为研究数据结构解决分析问题。我怀疑是Java中的HashTable

我有一个HashMap

HashMap<String, Integer> map = new HashMap<>();

这个HashMap没有更少的密钥,但是,其中一些密钥是重复的。

map.put('k', 1);
map.put('k', 2);

依旧......

我的问题是当我要删除HashMap的一个键时。其中一些密钥也是重复的。

让我们看看。

map.remove('k');

我想在这种情况下,它将使用键'k'删除所有值,或者只删除它找到的第一个值。

在这种情况下会发生什么?我有点困惑。

感谢您的帮助!!

5 个答案:

答案 0 :(得分:3)

HashMap(或HashTable)中,您只能拥有 UNIQUE KEYS ,您不能将不同的值分配给同一个键。在您的代码中,您尝试使用相同的密钥放置2个不同的值:

map.put('k', 1);
map.put('k', 2);

猜猜是什么,将不会有2个条目,但只有1个,最后一个, REPLACE 上一个,因为它们具有相同的键 - 'k' 。因此,map.remove('k');将删除所有,这只是一个条目,而不是两个。

答案 1 :(得分:1)

您要问的有很多事情。让我们回答所有问题。

  1. HashTable与HashMap不同。但是,hashTable与HashMap非常相似。它们之间最大的区别在于,在HashTable中,每个方法都是同步的,这使得读/写成本极高。 HashMap的方法不同步。 HashTable或多或少已经过时,编写新代码的人应该避免使用HashTable。

  2. 在HashMap中,键始终是唯一的。即,不能有2个条目具有相同的密钥。在您的示例中,

  3.   

    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);