eclipseでスッキリわかるJava入門実践編を勉強しています。
以下のlist04-04.javaコードは正常動作しないコードなのですが、HeroクラスでhashCode()を
オーバーライドするとうまくいくと書いてあります。
Hero.javaがあるんですが、これとlist04-04.javaをどのように組み合わせると
実行結果
要素数=1
要素数=0
となるでしょうか。
List04_04a.javaとして実行すると上のような結果になるんですが、このコードは
どこか間違いがありますか。おしえてください。
List04_04a.java package sample2; import java.util.HashSet; import java.util.Set; class Hero { public String name; public boolean equals(Object o) { /* equals()をオーバーライドしている */ return true; } int hp; public int hashCode() { int result = 37; /* (1) 適当な初期値を決める */ result = result * 31 + name.hashCode(); /* (2) 各フィールドの影響を加える */ result = result * 31 + hp; return result; /* (3) 結果を返す */ } } public class List04_04 { public static void main(String[] args) { Set<Hero> list = new HashSet<Hero>(); /* HashSetを利用 */ Hero h1 = new Hero(); h1.name = "ミナト"; list.add(h1); /* インスタンスを作って格納 */ System.out.println("要素数=" + list.size()); h1 = new Hero(); h1.name = "ミナト"; list.remove(h1); /* 名前が「ミナト」の勇者を削除 */ System.out.println("要素数=" + list.size()); } }
Hero.java class Hero { String name; int hp; public int hashCode() { int result = 37; /* (1) 適当な初期値を決める */ result = result * 31 + name.hashCode(); /* (2) 各フィールドの影響を加える */ result = result * 31 + hp; return result; /* (3) 結果を返す */ } }
list04-04.java package sample; // 正常動作しない import java.util.HashSet; import java.util.Set; class Hero { public String name; public boolean equals(Object o) { /* equals()をオーバーライドしている */ return false; } } public class Main { public static void main(String[] args) { Set<Hero> list = new HashSet<Hero>(); /* HashSetを利用 */ Hero h1 = new Hero(); h1.name = "ミナト"; list.add(h1); /* インスタンスを作って格納 */ System.out.println("要素数=" + list.size()); h1 = new Hero(); h1.name = "ミナト"; list.remove(h1); /* 名前が「ミナト」の勇者を削除 */ System.out.println("要素数=" + list.size()); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/26 01:31