从TreeSet中删除对象

时间:2017-03-06 17:39:37

标签: java collections treeset

所以我有以下相关代码:

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;
    }
}

1 个答案:

答案 0 :(得分:1)

您的删除方法可能如下所示:

public static void remove(Object object){
   set.remove(o);
}

方法remove删除元素中存在的元素,如果元素被删除则返回true。您不应在迭代期间修改您的集合(docs):

  

此类的迭代器方法返回的迭代器是快速失败的:   如果在创建迭代器后的任何时间修改了该集,则   除了通过迭代器自己的remove方法,迭代器之外的任何方式   将抛出ConcurrentModificationException。因此,面对   并发修改,迭代器快速干净地失败,   而不是冒着任意的,非确定性的行为冒险   未来不确定的时间。