HashSet <custom class =“”>。contains(&#34; String&#34;)不工作</custom>

时间:2014-08-16 09:31:28

标签: android hashset

我有一个自定义类:

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

现在我要检查String&#34; gx&#34;在其中,我打电话给feature_index.contains("gx"),但结果是假的。

覆盖方法hashCode()equals()后,为什么它仍然无法在其中搜索字符串?

我检查了o instanceof String中的结果equals,该结果始终为false,但不涉及其他类型。

当我创建一个新的FeatureIndexEntry对象时,它可以正常工作。

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

感谢您的阅读,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您实际上正在添加 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));
    }

}