如何比较String与Hashmap键?

时间:2016-02-12 08:06:04

标签: java string hashmap

我将String与Hashmap的Key进行比较。

因此每次我运行此代码时都会输出:未找到

我是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");
                    }
                }
            }
        }
    });

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试以下方法:

String.valueOf(key).equals(value)

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

答案 2 :(得分:0)

首先,使用.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的情况。

答案 3 :(得分:0)

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

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

但无论如何,你在一个用于提供O(1)密钥查找的hashmap上使用O(n)迭代 - 为什么不使用它?

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");
}