使用 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'。
您要问的事情有很多。让我们一一回答。
HashTable与HashMap不一样。然而,hashTable 与 HashMap 非常相似。它们之间最大的区别在于,在HashTable中,每个方法都是同步的,这使得做一个read/write的成本非常高。 HashMap 的方法是不同步的。 HashTable 或多或少已经过时了,编写新代码的人应该避免使用 HashTable。
在 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);
我正在尝试解决一个仅用于研究数据结构的分析问题。我怀疑 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'。
您要问的事情有很多。让我们一一回答。
HashTable与HashMap不一样。然而,hashTable 与 HashMap 非常相似。它们之间最大的区别在于,在HashTable中,每个方法都是同步的,这使得做一个read/write的成本非常高。 HashMap 的方法是不同步的。 HashTable 或多或少已经过时了,编写新代码的人应该避免使用 HashTable。
在 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);