Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从树集中删除对象_Java_Collections_Treeset - Fatal编程技术网

Java 从树集中删除对象

Java 从树集中删除对象,java,collections,treeset,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); } } }

因此,我有以下相关代码:

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);
        }
    }
}
是打印出来的

然而,当我随后使用for循环打印整个集合时,如下所示:

for (Object o: set){
        System.out.println(o);
    }
它仍然打印出整个集合,包括object1。很明显,在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;
    }
}
公共类播放器实现可比较的{
公共字符串名;
公共字符串lastname;
公共价值观;
公共职位;
公共播放器(字符串名、字符串名、int值、位置){
this.firstname=firstname;
this.lastname=lastname;
这个值=值;
这个位置=位置;
}
公共字符串toString(){
return(firstname+“”+lastname)
}
公共整数比较(玩家){
如果(this.value>player.value){
返回-1;
}否则{
返回1;
}
}

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

public static void remove(Object object){
   set.remove(o);
}
方法remove将删除集合中存在的元素,如果元素已被删除,则返回true。您不应在迭代()期间修改集合:

此类的迭代器方法返回的迭代器是fail fast: 如果在创建迭代器后的任何时间修改集合,则在 除了通过迭代器自己的remove方法,迭代器 将抛出ConcurrentModificationException。因此 并发修改,迭代器快速、干净地失败, 而不是冒着一种随意的、不确定的行为的风险 未来时间未定


您的对象是否实现了
hashCode()
?请发布一个。请显示一些显示对集合和对象的操作的代码。您如何创建对象,它们如何实现hashCode(),如何将它们添加到集合中?您使用的是对象类,您是否也设置了任何属性?如果您将代码粘贴到此处,我们将更容易帮助您。
树集
需要实现
可比
接口的对象或
比较器
来比较元素。您使用哪一个?此操作时返回0.value==比较中的player.value到(…)方法,它会起作用。这是真的,但没有回答问题。我怀疑迭代只是为了证明元素在集合中。在这种情况下,当一个元素被删除并且modCount值被更改时,它应该抛出ConcurrentModificationException,因此迭代器应该失败。我实际上已经尝试过这种方法,但不知怎的,它会失败dn不起作用。我实现了for循环,以查看Java是否识别出对象仍在集合中(它是这样的)。如果remove(o)实际正常工作,我将删除不必要的for循环。;)
public static void remove(Object object){
   set.remove(o);
}