HashSet<custom class>.contains( "String" ) 不起作用



我有一个自定义类:

private class FeatureIndexEntry {
    public String feature_name;
    public int index;
    public FeatureIndexEntry (String feature_name) {
        this.feature_name = feature_name;
    }
    @Override
    public int hashCode () {
        return this.feature_name.hashCode();
    }
    @Override
    public boolean equals (Object o) {
        if (this == o) return true;
        if (o instanceof String) {
            return ((String) o).equals(this.feature_name);
        }
        if (!(o instanceof FeatureIndexEntry)) return false;
        return ((FeatureIndexEntry) o).feature_name.equals(this.feature_name);
    }
}

我还有HashSet<FeatureIndexEntry> feature_index;,里面已经有东西了

feature_index.add( new FeatureIndexEntry("gx") );
feature_index.add( new FeatureIndexEntry("gy") );

现在我想检查字符串"gx"是否在其中,我调用feature_index.contains("gx"),但结果是假的。

重写hashCode()equals()方法后,为什么仍然不能在其中搜索字符串?

我在equals中检查了结果o instanceof String,这总是false,但没有涉及其他类型。

当我创建一个新的FeatureIndexEntry对象,它工作得很好。

FeatureIndexEntry a = new FeatureIndexEntry("gx");
feature_index.contains(a); // true

感谢您的阅读,任何帮助都将不胜感激。

您实际上是在添加对象的FeatureIndexEntry ,并搜索String类型的对象。这将如何运作??

按如下方式修改Test类

public class Test2 {
    public static void main(String[] args) {
        HashSet<FeatureIndexEntry> feature_index = new HashSet<FeatureIndexEntry>();
        FeatureIndexEntry f1 = new FeatureIndexEntry("gx");
        FeatureIndexEntry f2 = new FeatureIndexEntry("gy");
        feature_index.add(f1);
        feature_index.add(f2);
        System.out.println(feature_index.contains(f1));
    }
}

最新更新