2013-04-25 60 views
2

也許一個新手問題,如果我在TreeSet中更改元素的同時遍歷它,會發生什麼?這是否會導致集合中元素的重新排序?當一個元素在遍歷時發生變化時Treeset的行爲

+2

好吧,試試吧,看看:)另外,如果通過遍歷你的意思是通過迭代器迭代,通過改變你的意思是添加/刪除,然後閱讀http://stackoverflow.com/questions/6460320/using-iterator- on-a-treeset – 2013-04-25 14:30:28

+1

這裏的例子是添加/刪除元素。如果我在迭代時修改元素本身呢? (我正在嘗試平均:) :) – u07103 2013-04-25 14:38:00

+0

好吧,你現在有一個很好的答案:) +1試用它。 – 2013-04-25 14:38:40

回答

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

正如你所看到的,這根本不是很漂亮。這就是爲什麼作爲一般規則,您應該更喜歡不變的您的地圖的密鑰,無論是基於散列的還是基於樹的。

+0

這有幫助!非常感謝這個解釋:) – u07103 2013-04-25 14:44:22

相關問題