少し面倒ですが、次のようにメソッドをオーバーライドequals
できます。
class Person
{
int age;
String name;
String address;
Person(int a, String n, String ad) { age = a; name = n; address = ad; };
@Override
public boolean equals(Object o)
{
Person p = (Person)o;
if (p.age != -1 && age != -1 && p.age != age)
return false;
if (p.name != null && name != null && !p.name.equals(name))
return false;
if (p.address != null && address != null && !p.address.equals(address))
return false;
return true;
}
}
と は初期化されていない値であると想定-1
しnull
ています。
使用法:
ArrayList<Person> arr = new ArrayList<Person>();
arr.add(new Person(18,"tony","here"));
System.out.println(arr.contains(new Person(18,"tony",null))); // prints true