我有一个自定义类:
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
感谢您的阅读,我们将不胜感激。
答案 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));
}
}