Когда я запускаю следующий код:Возвращение SortedSet
Student student1 = new Student("Billy", 13);
Student student2 = new Student("Bob", 12);
Student student3 = new Student("Belle", 11);
Student student4 = new Student("Barry", 10);
Student student5 = new Student("Brian", 10);
Student student6 = new Student("Bane", 13);
Collection<Student> students = new HashSet<Student>();
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
students.add(student6);
for(Student student : students)
{
String name = student.getName();
System.out.println(name);
}
Это будет распечатать список имен для моих студенческих объектов. Теперь я хотел бы сделать их в алфавитном порядке. Я думал, что это будет так же просто, как использовать TreeSet или SortedSet.
Как это:
Student student1 = new Student("Billy", 13);
Student student2 = new Student("Bob", 12);
Student student3 = new Student("Belle", 11);
Student student4 = new Student("Barry", 10);
Student student5 = new Student("Brian", 10);
Student student6 = new Student("Bane", 13);
Collection<Student> students = **new TreeSet<Student>();**
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
students.add(student6);
for(Student student : students)
{
String name = student.getName();
System.out.println(name);
}
Но это только бросает исключение:
Exception in thread "main" java.lang.ClassCastException: helloworld.Student cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542)
at java.util.TreeSet.add(TreeSet.java:238)
at helloworld.Main.main(Main.java:60)
Java Результат: 1
Я добавил метод CompareTo в студенческом классе тоже:
public int compareTo(Student other)
{
return this.getName().compareTo(other.getName());
}
Всегда, всегда, всегда отправляйте исключение (или ошибку времени компиляции), когда ваш вопрос включает в себя один. Я предполагаю, что 'Student' не реализует' Comparable', но мы не можем сказать, поскольку у нас нет ни исключения, ни класса 'Student' ... –
Вы не читаете javadoc TreeSet. В нем говорится: * Элементы упорядочиваются с использованием их естественного упорядочения или Компаратором, предоставленным в заданное время создания, в зависимости от того, какой конструктор используется *. Часть * естественного упорядочения * ссылается на Comparable, который ваш класс не реализует. И вы не предоставили компаратора. Как TreeSet сравнивает несопоставимые элементы? –
Исключение в теме "main" java.lang.ClassCastException: helloworld.Student нельзя отнести к java.lang.Comparable в java.util.TreeMap.put (TreeMap.java:542) at java.util.TreeSet.add (TreeSet.java:238) at helloworld.Main.main (Main.java:60) Java Результат: 1 Извините, я новичок ко всему этому. Это исключение. Так что мне нужно создать сопоставимый метод в моем классе? – Khal