我有一个包含多个集合的类,我在从其中一个集合中删除一些对象时遇到问题。如果我调用 collection.contains(object) 它返回 true 然后在下一行我调用 collection.remove(object) 并且对象不会被删除。
这是无效的原始代码。所有的集合都是 SortedSet。让我感到困惑的是,男性集合是直接从 people 集合中填充的,但是当您尝试从 people 集合中删除男性对象时,并非所有对象都会被删除。
for(Person person : peopleBin.getPeople())
{
if(person.isMale())
{
peopleBin.getMen().add(person);
}
}
peopleBin.getPeople().removeAll(peopleBin.getMen());
Person 有一个这样的 equals 方法
public boolean equals( Object obj )
{
if ( obj == null )
return false;
if ( !(obj instanceof Person) )
return false;
Person that = (Person)obj;
return
that.age == age &&
that.id == id &&
that.someCount == someCount ;
}
现在,当我用这个替换第一个片段的 removeAll 行时,我得到了奇怪的行为。
for(Person person: personBin.getMen())
{
if(personBin.getPeople().contains(person))
personBin.getPeople().remove(person);
}
if(personBin.getPeople().contains(person)) 总是返回 true,但 personBin.getPeople().remove(person) 并不总是删除。有时会,有时不会。
我已将所有类名和字段名更改为通用的,以便在公共论坛上发布。
任何帮助将不胜感激!
编辑:这里是 compareTo impl
public int compareTo (Object o)
{
if ( ! ( o instanceof Person) )
{
throw new ClassCastException();
}
Person that = (Person)o;
int comparison = 0;
return
( (comparison = this.age () - that.age ()) != 0 ? comparison :
( (comparison = this.id - that.id) != 0 ? comparison :
( (comparison = this.someCount - that.someCount ))));
}
编辑:这里是 hashCode impl
public int hashCode() {
int result = 31;
result = 61*result + age;
result = 61*result + id;
result = 61*result + someCount;
return result;
}