【问题标题】:How to compare a String with Hashmap key? [duplicate]如何将字符串与 Hashmap 键进行比较? [复制]
【发布时间】:2016-02-12 08:06:04
【问题描述】:

我想将字符串与哈希图的键进行比较。

所以每次我运行这段代码时,它都会输出:未找到

我是 Java 新手,这肯定是一件小事,但我需要帮助。

这是我的代码

btnNewButton.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            if(!txtSearchHere.getText().isEmpty() && txtSearchHere.getText().length() > 1)
            {
                String value = txtSearchHere.getText();
                txtSearchHere.setText("");

                for(Integer key : plzHashMap.keySet())
                {
                    if(key.toString() == value)
                    {
                        System.out.println("Matched key = " + value);
                    }
                    else
                    {
                        System.out.println("Not found");
                    }
                }
            }
        }
    });

【问题讨论】:

  • Use key.toString().equals(value) as == 将比较它是否是同一个对象(引用),而 .equals() 比较值。
  • 试试key.toString().equals(value)
  • 我认为你的逻辑是错误的。您确定要让 USER 输入密钥吗?根据您的“txtSearch”变量,我假设您不打算这样做。

标签: java string hashmap


【解决方案1】:

对于 Java 中的所有字符串比较,您应该使用 .equals() 而不是 ==

所以改变:

if(key.toString() == value)

到:

if(key.toString().equals(value))

原因是== 用于检查实例是否完全相同(参考),而.equals 用于检查相同的值。

See this SO question (among a lot of others) for more info

【讨论】:

    【解决方案2】:

    尝试以下方法:

    String.valueOf(key).equals(value)
    

    永远不要将 String 与 == 进行比较,使用 .equals()。

    【讨论】:

      【解决方案3】:

      首先,使用.equals() 比较字符串,而不是==

      其次,它会多次输出Not found,因为该语句在循环内。您可以将其移出循环:

                  boolean found = false;
                  for(Integer key : plzHashMap.keySet())
                  {
                      if(key.toString().equals(value))
                      {
                          System.out.println("Matched key = " + value);
                          found = true;
                          break;
                      }
                  }
                  if (!found) {
                      System.out.println("Not found");
                  }
      

      但是,将value 转换为Integer 会容易得多:

      Integer intValue = Integer.parseInt(value);
      

      然后只需调用 gethasKey - 不需要循环:

      if (plzHashMap.hasKey(intValue)) {
        System.out.println("Matched key = " + plzHashMap.get(intValue));
      } else {
        System.out.println("Not found");
      }
      

      当然,您需要处理value 无法解析为int 的情况。

      【讨论】:

        【解决方案4】:

        == 运算符检查参考身份。您应该使用equals 方法来检查平等

        if(key.toString().equals(value))
        

        但无论如何,您在哈希映射上使用 O(n) 迭代,该哈希映射旨在提供 O(1) 键查找 - 为什么不使用它?

        boolean found = false;
        try {
            Integer integerValue = Integer.valueOf(value);
            if (plzHashMap.containsKey(integerValue)) {
                System.out.println("Matched key = " + value)
                found = true;
            }    
        } catch (NumberFormatException ignore) {
            // value is not even a number
        }
        
        if (!found) {
            System.out.println("Not found");
        }
        

        【讨论】:

          猜你喜欢
          • 2017-12-11
          • 2021-10-02
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          • 2018-10-05
          • 2021-09-14
          • 2021-07-10
          • 1970-01-01
          相关资源
          最近更新 更多