Javaのhashcodeとequalの方法について
3906 ワード
1、 object
2、equal object , hashcode ; hashcode object , 。
JDK , string, , hashcode equal ( string hashcode)。
3、 , , equal 。
, , map、set。 , hashset , hashmap key 。 , hashcode, hash 。
java , :
1, hashCode
, ,
, 2
2, equals
,
,
,equal hashcode , 。 :
package com.yj.testequal;
public class MyString {
String mStr;
int mHashCode;
public MyString(String s, int hashcode) {
mStr = s;
mHashCode = hashcode;
}
@Override
public int hashCode() {
return mHashCode;
}
@Override
public boolean equals(Object obj) {
if(! (obj instanceof MyString))
return false;
return mStr.equals(((MyString)obj).mStr);
}
}
のカスタムクラスはhashcodeとequalをそれぞれ き えます.テスト:package com.yj.testequal;
import java.util.HashSet;
import java.util.Set;
public class TestEqual {
/**
* @param args
*/
public static void main(String[] args) {
MyString m1 = new MyString("fuck1", 123);
MyString m2 = new MyString("fuck2", 2344);
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
System.out.println(m1.equals(m2));
MyString m3 = new MyString("fuck12", 123);
System.out.println(m1.equals(m3));
Set sms = new HashSet();
sms.add(m1);
sms.add(m2);
if(sms.contains(m3)) {
System.out.println("contains");
} else {
System.out.println("not contains");
}
}
}
m 1とm 2をそれぞれ した 、m 3のhashcode り をm 1と じにするか、equal り を で すかにかかわらず、setでは じオブジェクトとは えないオブジェクトm 3を します.hashcodeメソッドとequalメソッドの り が じである にのみ、 じオブジェクトとみなされます.
なぜ の でこのように するのかというと、 の が に きい 、ハッシュ が し、 なるキーが じ き を する があるからです.hashcodeが じならequalの を けましょう.equalメソッドを すると クエリになります.
: なハッシュ はJava SE 5のEnumMapとEnumSetで されています.