也许是一个新手问题,如果我在遍历 TreeSet 时更改一个元素会发生什么?这会导致集合中元素的重新排序吗?
问问题
169 次
1 回答
2
这会导致集合中元素的重新排序吗?
不,改变集合内的元素不会导致树集合的重新排序。你永远不应该这样做,因为一旦你做出改变顺序的突变,你的元素可能会在树中丢失。你应该做的是删除元素,改变其改变顺序的属性,然后重新插入它。
考虑这个示例类:
class Student : Comparable<Student> {
private String name;
public Student(String name) {this.name = name;}
public final String getName() {return name;}
public final void setName(String name) { this.name = name;}
public int compareTo<Student>(Student other) {
return name.compareTo(other.name);
}
}
如果你制作这样的树集
TreeSet<Student,Integer> gradeInMath = ...
然后决定在学生的名字已经在集合中时更改它,你应该这样做:
Student nameChangeStudent = new Student("Joe");
Integer theGrade = gradeInMath.remove(nameChangeStudent);
nameChangeStudent.setName("Jack");
gradeInMath.put(nameChangeStudent, theGrade);
如您所见,这根本不漂亮。这就是为什么作为一般规则,您应该更喜欢地图的不可变键,包括基于散列的和基于树的。
于 2013-04-25T14:34:26.220 回答