【问题标题】:How to access the keys of a Hashmap and compare them with a predetermined value?如何访问 Hashmap 的键并将它们与预定值进行比较?
【发布时间】:2015-05-23 01:40:21
【问题描述】:

我有这个哈希图:

HashMap<String, Student> students = new HashMap<String, Student>();

从用户输入 (sNo, name) 获得 2 个字符串值后,我可以将这些值放入 hashmap 中:

students.put(sNo, new Student(sNo, name));

我的问题是,每次运行此过程时,我都希望能够检查 Hashmap 键以确保输入的 sNo 与之前使用的不同。

我试过if(sNo == students.keySet()),但没用。

【问题讨论】:

    标签: java hashmap unique


    【解决方案1】:

    您所做的是比较 5 (sNo) 是否与对象 (keySet()) 相同。您将永远无法满足此条件。您正在寻找的是查询 keySet 是否包含您的 sNo 值。

    if (students.keySet().has(sNo))
    

    Map 以这种方式为此提供了一个快捷方式:

    if (students.containsKey(sNo))
    

    另外,顺便说一句,在 Java 中,我们这样写:

    Map<Integer, Student> students = new HashMap<>();
    

    上面的代码告诉我们,students 变量是一个 Map,以 Integer 为键,Student 为值。实际的地图实现是未知的,你不应该真正关心它。然后创建一个 HashMap,它是 Map 接口的实际实现,并使用所谓的菱形运算符 告诉编译器键和值与变量声明中的键和值相同。

    【讨论】:

    • 非常感谢,我会试试看的。
    【解决方案2】:

    您必须使用循环来与哈希图中当前的所有键进行比较,一次一个。这样,您将 sNo 与 key1 进行比较,然后将 sNo 与 key2 进行比较,等等。您现在尝试的方式,

    (sNo == students.keySet())
    

    尝试将一个键与一整套键进行比较,这对计算机没有意义。当你比较“事物”时,两个“事物”需要是相同的类型,在这种情况下是类型“字符串”。循环的语法是

    for(String s: students.keySet()){
    //body
    }
    

    这个 for 循环的意思是“对于键集中的每个字符串...(正文:将 sNo 与 s 进行比较)”然后在正文中进行比较。

    重要提示!:您不应将字符串与“==”进行比较,而应将它们与 .equals() 进行比较。例如,不要这样做

    if(sNo == s)
    

    而是

    if(sNo.equals(s))
    

    如果您想知道我从哪里得到 s,请查看 for 循环内部。对于键集中的每个字符串,它被分配给 s 变量。现在你有了 for 循环,在键集中的每个字符串和你当前的键 sNo 之间进行比较。

    【讨论】:

      【解决方案3】:

      如果您只是想确保在插入时密钥不存在于HashMap 中,您可以使用putIfAbsent(K key, V value) 方法:

      Student s = students.putIfAbsent(sNo, new Student(sNo, name));
      

      如果条目已经存在,则由方法返回,否则方法将条目插入映射并返回null:

      if (s != null) {
          System.out.println("Student "+s.getSno()+" already exists");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多