使用 HashMap 的问题

Problems using HashMap

我正在尝试解决一个仅用于研究数据结构的分析问题。我怀疑 Java.

中的 HashTable

我有一个 HashMap

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

而且这个 HashMap 有更少的键,但是,其中一些键是重复的。

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

等等...

我的问题是何时删除 HashMap 的键。其中一些键也是重复的。

让我们看看。

map.remove('k');

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

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

感谢您的帮助!!

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

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

你猜怎么着,不会有 2 个条目,只有 1 个,最后一个,它将 REPLACE 前一个,因为它们具有相同的密钥 - 'k'。因此,map.remove('k'); 将删除 所有内容 ,这只是一个条目,而不是两个。

在HashMap中Keys是唯一的,所以不会多次添加key K。当您删除键 "K" 时,它会从哈希表中删除唯一键 'K'。

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

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

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

map.put('k', 1);

这将在映射中创建一个条目,其键为 'k',值为 1。

然后,你

map.put('k', 2);

这不会创建另一个具有键 'k' 和值 2 的条目。这将覆盖第一个条目本身的值。因此,您将只有一个键 'k' 的条目,其值现在为 2(而不是 1)

现在,我想理解 remove() 会很容易。当您执行 remove(key) 时,它会尝试删除该键的 唯一条目

根据定义,Java 中的 HashMap 唯一地存储所有键。 简单地说,当我们尝试使用相同的键放置更多条目时,它将覆盖先前为该键定义的值。因此,在为该键设置多个值后删除该键意味着该键将不再存在于 HashMap.

有关详细信息,您可以阅读文档 here

使用

map.putIfAbsent('k',2);

而不是

map.put('k', 2);