在Hashcode中搜索不需要';我不能用Java工作

在Hashcode中搜索不需要';我不能用Java工作,java,set,containers,hashset,Java,Set,Containers,Hashset,我有一个 Set tablica = new HashSet(); 我想搜索它,所以我写了这样的东西: public void searchStudentbySurname() { int a = tablica.size(); if (0 >= a) { JOptionPane.showMessageDialog(null, "No data"); } else { String S = JOptionPane.showInput

我有一个

Set tablica = new HashSet();
我想搜索它,所以我写了这样的东西:

public void searchStudentbySurname() {
    int a = tablica.size();
    if (0 >= a) {
        JOptionPane.showMessageDialog(null, "No data");
    } else {
        String S = JOptionPane.showInputDialog(null, "Give me a surname");
        Iterator itr = tablica.iterator();
        while (itr.hasNext()) {
            String str = (String) itr.next();
            if(tablica.equals(S)) {    // this if doesn't work (1)
                JOptionPane.showMessageDialog(null, str);
            }

        }

    }

}
}


我想知道为什么(1)不起作用。

您正在将字符串与集合进行比较,因此它不能返回true

您可能想将其与
str
-
str.equals
进行比较,但即使这样也没有必要。
您只需将整个while循环替换为
tablica.contains
。这就是
Set
s的作用。

您希望将tablica中的项目与用户输入进行比较

应该是:

if(str.equals(S)) { 
不起作用,因为您正在比较两种不同类型(集合和字符串)的对象。你可以用它

如果此集合包含指定的元素,则返回true。更多 形式上,当且仅当该集合包含元素e时,返回true 使得(o==null?e==null:o.equals(e))


你为什么要绕圈子?为什么不直接使用
if(tablica.contains))
?(顺便说一下,
S
不是一个好的局部变量名…)
if(tablica.equals(S))