▪️Test55.java
import java.util.*;
public class Test55 {
public static void main(String[] args) {
Set<Cat55> cat = new HashSet<Cat55>();
Cat55 c1 = new Cat55();
c1.name = "ねこ";
Cat55 c2 = new Cat55();
c2.name = "ねこa";
Cat55 c3 = new Cat55();
c3.name = "ねこb";
Cat55 c4 = new Cat55();
c4.name = "ねこc";
Cat55 c5 = new Cat55();
c5.name = "ねこk";
Cat55 c6 = new Cat55();
c6.name = "ねこl";
cat.add(c1);
cat.add(c2);
cat.add(c3);
cat.add(c4);
cat.add(c5);
cat.add(c6);
System.out.println("要素数=" + cat.size());
// これをやることでc2オブジェクトのメンバー変数が全部空っぽになる
c2 = new Cat55();
c2.name = "ねこa";
// c2 = new Cat55();これをやることでc2オブジェクトの
// メンバー変数が全部空っぽになります
// 前にnewしたc2はリストの中に追加されてる
// 後にnewしたc2はリストの中に入ってない
// size()は格納されてる要素数を返す
// remove()を呼び出すとequalsメソッドが呼び出される
// equalsメソッドでは、リスト内に格納されている変数のnameが同じなら
// trueが変えるので、
// c2はそもそもリストに格納されていない
// c2.name = "ねこa"をc2.name = "ねこf";にすると
// removeされないので結果は3のままになってしまう
// c2.name = "ねこa"なら、removeでequalsメソッドを呼び出した時
// equalsメソッドでリスト内に格納されたnameと等しければtrueで
// removeできる
// つまりリスト内に格納されているnameと等しければremoveできる
// c2.name = "ねこa";をc2.name = "ねこ";にしてもremoveできる
// 後にnewしたc2と同じ名前のc2.name = "ねこa";がリストに格納されている
// nameと同じならtrueでremoveできる
cat.remove(c2);
System.out.println(cat.size());
cat.remove(c4);
System.out.println(cat.size());
c4 = new Cat55();
c4.name = "ねこj";
// removeできない
cat.remove(c4);
System.out.println(cat.size());
cat.add(c4);
System.out.println(cat.size());
cat.remove(c4);
System.out.println("c4をremove=" + cat.size());
System.out.println("c4をremove成功");
System.out.println("");
// 最初removeできてなかったのはc4がリストに格納されてなかったから
// cat.add(c4);でc4をリストに格納した
// removeでequalsメソッドが呼び出される
// equalsメソッドでリストに格納されているnameと同じであれば
// trueを返すので、removeされる
System.out.println("元々=" + cat.size());
c5 = new Cat55();
c5.name = "ねこk";
cat.remove(c5);
System.out.println("格納されているリスト数=" + cat.size());
// cat.add(c5);
System.out.println(cat.size());
cat.remove(c5);
System.out.println(cat.size());
c6 = new Cat55();
c6.name = "ねこm";
cat.remove(c6);
System.out.println("c6remove後=" + cat.size());
c6.name = "ねこn";
cat.add(c6);
System.out.println(cat.size());
System.out.println(cat);
}
}
▪️Cat55.java
public class Cat55 {
private int cp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Cat55))
return false;
Cat55 r = (Cat55) o;
if (!this.name.trim().equals(r.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int result = 37;
result = result * 31 + name.hashCode();
result = result * 31 + cp;
return result;
}
}
▪️Test55,java 実行結果
要素数=6
5
4
4
5
c4をremove=4
c4をremove成功
元々=4
格納されているリスト数=3
3
3
c6remove後=3
4
[Cat55@16b95ac9, Cat55@bc2e1f, Cat55@16b95c3d, Cat55@16b95bff]