【问题标题】:How to find same keys and values in HashMap如何在 HashMap 中找到相同的键和值
【发布时间】:2019-03-19 17:21:15
【问题描述】:

我有一个带有名称(键)和日期(值)的 HashMap,我需要显示我再次输入的名称是否重复(我正在使用不同状态进行套接字编程)。例如,我在地图中输入了 3 个不同的名称,第四次我输入了一个重复的名称。

我尝试了这些代码(它们运行)但没有成功:

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

if(stat.equals("RECEIVE_NAME")){
   name = reader.readLine();
   if(map.containsKey(name)){
      System.out.println("duplicate");
   }
}

for(Map.Entry<String, String> entry : map.entrySet()){
   if(name.equals(entry.getKey())){
      sendMessage("duplicate");
   }
}

注意:我有一个 map.put(name),在这个块序列之后不是重复的。而且我知道哈希映射不能有重复的键:)

【问题讨论】:

  • 当地图为空时,如何匹配地图中的任何键?您向我们展示了代码,您在其中创建了一个不包含任何键的全新地图。也许在检查重复之前确保您使用的地图的大小大于 0
  • A HashMap 不能有重复的键。
  • docs.oracle.com/javase/8/docs/api/java/util/… 如果可以插入更多线程,则使用并发版本
  • 您的第一个解决方案应该有效。您应该尝试使用调试器,并确保名称完全相同。注意空格。您可以尝试使用“name=reader.readLine().trim()。

标签: java hashmap key


【解决方案1】:

HashMap 不能包含重复的键。如果将键值对放入已经包含该键的映射中,则旧值将被新值替换。

【讨论】:

  • 是的,我明白了。我只是想了解如果我试图作为键的内容已经存在,我怎么能得到一个说“DUPLICATE”的字符串。
  • 好的,我明白了。在这种情况下,您的第一个解决方案应该有效。验证变量 name 是否与映射中的现有键完全相同。密切注意任何空白。必须准确。
【解决方案2】:

map.put() 返回与 key 关联的先前值,如果没有 key 映射,则返回 null。因此,您可以存储该返回值并检查是否不为空:

String check = map.put(name);
if(check != null){
    System.out.println("dup: " + check);
}

使用map.putIfAbsent(name) 不覆盖关联的值。

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 2013-10-16
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多