Постоянное сохранение изменяемых объектов, отсортированных в TreeSets

Я заметил, что TreeSet не сохраняет изменяемые объекты в отсортированном порядке, если значения атрибутов объекта изменяются позже. Например,

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 + "]";
    }   
}

Результатом будет:

[Student [age=10], Student [age=15], Student [age=30], Student [age=50]]
[Student [age=24], Student [age=15], Student [age=30], Student [age=50]]

После того, как я изменил возраст конкретного ученика, а затем распечатал TreeSet, набор больше не отсортирован. Почему это происходит? и как сохранить его всегда отсортированным?

11
задан aps 6 November 2011 в 20:08
поделиться