我有一个自定义类:
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));
}
}