1

在下面的代码中,我想使用“term”属性来生成哈希码。如何使用此 String 属性生成哈希码?

class Term {
    String term;
    @Override
    public boolean equals(Object o) {
        if (o instanceof Term) {
            return this.term.equals(((Term)o).term);
        }
        return false;
    }
    @Override
    public int hashCode() {
    }
}
4

3 回答 3

7

只需使用String#hashCode()带有null支票的方法。那就足够了:

@Override
public int hashCode() {
    int prime = 31;
    return prime + (term == null ? 0 : term.hashCode());    
}

您还应该修改equals()方法以事先进行null检查this.term

于 2013-10-27T19:47:15.127 回答
2

Objects如果您使用 JDK 1.7 或更高版本,则可以使用。

@Override
public int hashCode() { 
   int prime = 31;
   return prime + Objects.hashCode(this.stringAtrribute);    
}

对于多个属性:

@Override
public int hashCode() { 
   int prime = 31;
   return prime + Objects.hash(this.attributOne,this.atrributeTwo);    
}

是的,当然,与前面的答案一样,equalandhashcode方法应该具有一致性。

于 2018-01-05T07:10:45.677 回答
1

Eclipse 可以为您编写此代码。只需从 Source 菜单中选择 Generate hashCode and equals。

于 2013-10-27T20:05:45.500 回答