import java.util.Objects;
// カスタムオブジェクトを表ã™ã‚¯ãƒ©ã‚¹
class CustomObject {
private int intValue;
private String stringValue;
// コンストラクタã§åˆæœŸåŒ–
public CustomObject(int intValue, String stringValue) {
this.intValue = intValue;
this.stringValue = stringValue;
}
// ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã®è¨ˆç®—
@Override
public int hashCode() {
// ç•°ãªã‚‹ç´ 数を使用ã—ã¦ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã‚’計算
int result = 17; // åˆæœŸå€¤ã«17ã‚’é¸ã¶ï¼ˆç´ æ•°ã§ã‚ã‚‹ã“ã¨ãŒå¥½ã¾ã—ã„)
result = 31 * result + intValue; // intValueãŒå½±éŸ¿ã™ã‚‹éƒ¨åˆ†ã®ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã‚’åŠ ç®—
result = 31 * result + Objects.hashCode(stringValue); // stringValueãŒå½±éŸ¿ã™ã‚‹éƒ¨åˆ†ã®ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã‚’åŠ ç®—
return result;
}
// オブジェクトã®ç‰ä¾¡æ€§ã®æ¯”較
@Override
public boolean equals(Object obj) {
// åŒä¸€ã®ã‚ªãƒ–ジェクトã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’最åˆã«ç¢ºèª
if (this == obj) return true;
// nullã‚„ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトã¯ç‰ä¾¡ã§ãªã„ã¨è¦‹ãªã™
if (obj == null || getClass() != obj.getClass()) return false;
// objã‚’ã“ã®ã‚¯ãƒ©ã‚¹ã®åž‹ã«ã‚ャスト
CustomObject other = (CustomObject) obj;
// å„フィールドã®ç‰ä¾¡æ€§ã‚’比較
return intValue == other.intValue &&
Objects.equals(stringValue, other.stringValue);
}
// メインメソッドã§ã®ãƒ†ã‚¹ãƒˆ
public static void main(String[] args) {
// オブジェクトã®ä½œæˆ
CustomObject obj1 = new CustomObject(42, "Hello");
CustomObject obj2 = new CustomObject(42, "Hello");
// ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã®ä¸€è²«æ€§ã‚’確èª
System.out.println("Hashcode of obj1: " + obj1.hashCode());
System.out.println("Hashcode of obj2: " + obj2.hashCode());
// equalsメソッドを使用ã—ã¦ã‚ªãƒ–ジェクトã®ç‰ä¾¡æ€§ã‚’確èª
System.out.println("obj1 equals obj2: " + obj1.equals(obj2));
}
}
ã“ã®ä¾‹ã§ã¯ã€hashCodeメソッド内ã§ç•°ãªã‚‹åž‹ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ç•°ãªã‚‹ç´ 数を使用ã—ã¦ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã‚’計算ã—ã¦ã„ã¾ã™ã€‚ã¾ãŸã€equalsメソッドもオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€hashCodeã¨equalsãŒä¸€è²«ã—ã¦å‹•作ã—ã€HashMapã‚„HashSetãªã©ã®ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã§æ£ã—ãæ©Ÿèƒ½ã—ã¾ã™ã€‚ãŸã ã—ã€å®Ÿéš›ã®ãƒ—ãƒãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã‚³ãƒ¼ãƒ‰ã§ã¯ã‚‚ã£ã¨æ³¨æ„æ·±ã„実装ãŒå¿…è¦ã§ã™ã€‚
「018 オブジェクト指å‘ã®æ·±åŒ–ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント