我将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");
}
}
}
}
});
答案 0 :(得分:1)
对于Java中的所有字符串比较,您应该使用.equals()
而不是==
。
所以改变:
if(key.toString() == value)
为:
if(key.toString().equals(value))
原因是==
用于检查实例是否完全相同(引用),而.equals
检查相同的值。
答案 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);
然后只需致电get
和hasKey
- 无需循环:
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");
}