java - HashMap containsKey() 查询的输出未返回正确的值

标签 java hashmap entryset

程序将根据If语句打印不正确的键和值。 有人能解释一下为什么吗?

例如键 = 汤姆叔叔 + 值 = 02086542222 键 = Harry + 值 = 020826262

查询=汤姆叔叔

返回 = 键 = Harry + 值 = 00826262

引用以下文档:

“更正式地说,当且仅当此映射包含键 k 的映射且满足 (key==null ? k==null : key.equals(k)) 时才返回 true”

所以我的印象是 if(Contacts.containsKey(query)) 会使用 key.equals(k) 将输入查询与 key 进行比较

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class HRHashMap {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);

        Map<String, Integer> Contacts = new HashMap<String, Integer>();//Specify HashMap of type String

        int numOfContacts = scan.nextInt();
        scan.nextLine();

        //Add contacts
        for (int i = 0; i < numOfContacts; i++) {
            String contactName = scan.nextLine();
            int contactNumber = scan.nextInt();
            scan.nextLine();
            Contacts.put(contactName, contactNumber);
        }

        //Iterate over the Map
        for (Entry<String, Integer> entry : Contacts.entrySet()) {
            String query = scan.nextLine();
            if (Contacts.containsKey(query)) {
                //System.out.println(Contacts.get(query));
                System.out.println(entry.getKey() + "=" + entry.getValue());
            } else {
                System.out.println("Not found");
            }
        }

    }
}

最佳答案

您的程序会迭代映射中的每个条目,为每个条目请求一些输入(query),然后检查 query 是否是映射中的键,如果它打印当前访问的条目(与查询完全无关)。

因此输出看起来“正确”: map 确实包含“Uncle Tom”,因此它继续打印第一个条目(“Harry”)。请注意,“第一个”在 HashMap 中是一个模糊的概念,条目的迭代顺序是未指定的。

我不太明白为什么你循环遍历所有条目,但是你注释掉的行(打印与 query 匹配的条目)可能会更好:

System.out.println(Contacts.get(query));

关于java - HashMap containsKey() 查询的输出未返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54387614/

相关文章:

java - HQL:如何进行Not Exists查询?

java - 尽管键不同, HashMap 条目仍会覆盖先前的条目

java - 性能 - 使用 keySet 迭代器而不是 entrySet 迭代器的效率低下

java - 如何获得HashMap中的3个最高值?

java - 当键盘处于全屏模式时,EditText 提示不会改变?

java - 如何在我的 Java Web 应用程序中使用 Google 音译 API?

java - 使用AtomicInteger时进行同步

Java Hash Map(1 个键多个值)

java - 使用java中的标准键初始化非静态 HashMap

java - 打印HashMaps : Map. Entry或java8的HashMap