所以我有以下相关代码:
public static TreeSet<Object> set;
public static void remove(Object object){
for (Object o : set){
if (o.equals(object)){
System.out.println("removing " + o);
set.remove(o);
}
}
}
我向该TreeSet添加了一些对象,然后使用某个object1作为参数调用remove。 object1在集合中,如
removingobject1
打印出来。
然而,当我使用像这样的for循环打印出整个集合时:
for (Object o: set){
System.out.println(o);
}
它仍打印出包括object1在内的整个集合。很明显,在Java之前的集合中,Java能够识别,但是调用set.remove(o)绝对没有任何结果。
编辑:我尽量保持问题的一般性,但这里是我使用的对象:
public class Player implements Comparable<Player>{
public String firstname;
public String lastname;
public int value;
public Position position;
public Player(String firstname, String lastname, int value, Position position){
this.firstname = firstname;
this.lastname = lastname;
this.value = value;
this.position = position;
}
public String toString(){
return(firstname + " " + lastname")
}
public int compareTo(Player player){
if (this.value > player.value){
return -1;
} else {
return 1;
}
}
答案 0 :(得分:1)
您的删除方法可能如下所示:
public static void remove(Object object){
set.remove(o);
}
方法remove删除元素中存在的元素,如果元素被删除则返回true。您不应在迭代期间修改您的集合(docs):
此类的迭代器方法返回的迭代器是快速失败的: 如果在创建迭代器后的任何时间修改了该集,则 除了通过迭代器自己的remove方法,迭代器之外的任何方式 将抛出ConcurrentModificationException。因此,面对 并发修改,迭代器快速干净地失败, 而不是冒着任意的,非确定性的行为冒险 未来不确定的时间。