たくさんの連絡先を保存する必要がある学校の課題をやっています。各連絡先には、HashSet
ソーシャル ネットワーク アカウント、住所、電話番号があります。
同じオブジェクトの複数のコピーを my に保存したくないので、各オブジェクトのandメソッドをHashSet
オーバーライドしました。hashCode()
equals()
しかし、私のソーシャル ネットワーク アカウント オブジェクトについてのみ、HashSet
同じオブジェクトを 2 回保存しています。私は2つの異なるオブジェクトを持っています:
SocialNetworkAccount s1 = new SocialNetworkAccount(SocialNetworkAccount.AccountType.FACEBOOK, "wallcrawler123");
SocialNetworkAccount s2 = new SocialNetworkAccount(SocialNetworkAccount.AccountType.FACEBOOK, "wallcrawler123");
s1.equals(s2)
戻っtrue
てs1.hashCode() == s2.hashCode()
戻ってきますtrue
が、s1 == s2
戻ってきますfalse
!なんで?
これはhashCode()
私が使用している方法です:
public int hashCode() {
int prime = 31;
int result = 1;
result = result*prime + type.hashCode();
result = result*prime + id.hashCode();
return result;
}