【发布时间】:2017-03-06 17:39:37
【问题描述】:
所以我有以下相关代码:
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 能够识别它,但调用 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;
}
}
【问题讨论】:
-
你的对象是否实现
hashCode()?请发帖minimal reproducible example。 -
请显示一些代码来显示您的集合和对象的操作。你如何创建你的对象,它们如何实现 hashCode(),你如何将它们添加到集合中?
-
您正在使用对象类您是否还设置了任何属性?如果您将代码粘贴到此处,我们会更容易为您提供帮助。
-
TreeSet需要实现Comparable接口的对象或Comparator来比较元素。你用哪个? -
当 this.value == player.value 在你的 compareTo(...) 方法中返回 0 并且它会起作用。
标签: java collections treeset