Il m'est apparu qu'un TreeSet ne conserve pas les objets mutables dans l'ordre de tri si les valeurs d'attribut d'objet sont modifiées plus tard. Par exemple,Garder les objets mutables triés dans TreeSets en tout temps
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 + "]";
}
}
La sortie est:
[Student [age=10], Student [age=15], Student [age=30], Student [age=50]]
[Student [age=24], Student [age=15], Student [age=30], Student [age=50]]
Après avoir changé de l'âge d'un élève en particulier, puis imprimez le TreeSet, le jeu ne semble plus dans l'ordre. Pourquoi cela arrive-t-il? et comment le garder trié toujours?
ok. Une idée sur laquelle on serait plus rapide? – aps
Supprimer/réinsérer sera probablement plus rapide (O (log n) par opposition à O (n log n)). – aioobe
'Collections.sort' ne fonctionne pas pour' TreeSet' –