也許一個新手問題,如果我在TreeSet中更改元素的同時遍歷它,會發生什麼?這是否會導致集合中元素的重新排序?當一個元素在遍歷時發生變化時Treeset的行爲
2
A
回答
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
相關問題
- 1. 當尺寸變化時遍歷一個n維數組
- 2. 遍歷發生器同時
- 3. 在比較2個元素時遍歷一個列表
- 4. jQuery在元素類發生變化時執行函數
- 5. 當溢出發生變化時,下一個元素不會被按下
- 6. 當一個元素屬性發生變化時,javascript回調函數
- 7. JQuery的:遍歷時DOM元素
- 8. 在遍歷JQuery中的元素時使用變量
- 9. 當UITabBarController的'selectedViewController'發生變化時觸發一個事件?
- 10. 當'道具'發生變化時'this'發生變化
- 11. ng-repeat元素的索引在排序時發生變化
- 12. 當變量發生變化時做一個動作
- 13. 當元素的````屬性發生變化時,是否會觸發事件?
- 14. 多個時間戳當一個單元格中的值發生變化
- 15. 當事件源發生變化時,viewRender不會更新日曆
- 16. 在遍歷數組的同時包裝每三個元素
- 17. WPF:如何在元素寬度發生變化時動畫元素的寬度
- 18. 當不同的值發生變化時返回一個值
- 19. 遍歷一個HTML表格元素
- 20. 當我停止從XCode啓動時行爲發生變化
- 21. Knockout - 當邊界值發生變化時什麼會觸發元素?
- 22. PHP DOM在另一個元素內遍歷元素
- 23. 如何在一個時間循環遍歷數組中的多個元素
- 24. 當ListView中的數據發生變化時,保持所選元素的狀態
- 25. 當ontext發生變化時float.parsefloat numberformatexception
- 26. 當歷史發生變化時,唯一引用Git中的提交
- 27. 在javaScript中遍歷元素
- 28. 迭代遍歷列表和pop()時發生索引錯誤 - ing元素
- 29. 當屬性可見性發生變化時動畫一個StackPanel
- 30. 當TWebBrowser文檔中的活動元素髮生變化時檢測到
好吧,試試吧,看看:)另外,如果通過遍歷你的意思是通過迭代器迭代,通過改變你的意思是添加/刪除,然後閱讀http://stackoverflow.com/questions/6460320/using-iterator- on-a-treeset – 2013-04-25 14:30:28
這裏的例子是添加/刪除元素。如果我在迭代時修改元素本身呢? (我正在嘗試平均:) :) – u07103 2013-04-25 14:38:00
好吧,你現在有一個很好的答案:) +1試用它。 – 2013-04-25 14:38:40