Zauważyłem, że obiekt TreeSet nie zachowuje uporządkowanych obiektów w porządku posortowanym, jeśli wartości atrybutów obiektu zostaną później zmienione. Na przykład,Utrzymywanie zmieniających się obiektów posortowanych w drzewkach przez cały czas
public class Wrap {
static TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.age - o2.age;
}
});
public static void main(String []args){
Student s = new Student(10);
ts.add(s);
ts.add(new Student(50));
ts.add(new Student(30));
ts.add(new Student(15));
System.out.println(ts);
s.age = 24; //Here I change the age of a student in the TreeSet
System.out.println(ts);
}
}
class Student{
int age;
Student(int age){
this.age = age;
}
@Override
public String toString() {
return "Student [age=" + age + "]";
}
}
Wyjście jest:
[Student [age=10], Student [age=15], Student [age=30], Student [age=50]]
[Student [age=24], Student [age=15], Student [age=30], Student [age=50]]
Po zmienić wiek konkretnego ucznia, a następnie wydrukować TreeSet, zestaw nie wydaje się już posortowanych. Dlaczego to się dzieje? i jak go zawsze sortować?
ok. Masz pojęcie, który z nich będzie szybszy? – aps
Usuwanie/reinsert będzie prawdopodobnie szybsze (O (log n) w przeciwieństwie do O (n log n)). – aioobe
'Collections.sort' nie działa dla' TreeSet' –