Эффективная сортировка в Java осуществляется с помощью внутренних средств. Рассмотрим сортировку коллекций в Java при помощи метода Collections.sort и интерфейса Comparator.
Создание класса Student в Java
Для начала напишем класс, из объектов которого, создадим коллекцию ArrayList. В последствии, на примере данной коллекции, покажем, как осуществляется сортировка в Java.
Класс Student содержит три поля: FIO — ФИО студента, group — название группы, в которой обучается студент, и averageMark — средний балл студента за семестр. В классе присутствуют геттеры и сеттеры для данных полей.
Также класс содержит метод println(), выводящий в консоль всю информацию о студенте.
Приведём код Java-класса Student:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package comparatorjavasort; public class Student { private String FIO; private String group; private int averageMark; //конструктор public Student (String _FIO, String _group, int _averageMark) { FIO = _FIO; group = _group; averageMark = _averageMark; } //геттеры и сеттеры public String getFIO() { return FIO; } public void setFIO(String _FIO) { FIO = _FIO; } public String getGroup() { return group; } public void setGroup(String _group) { group = _group; } public int getAverageMark() { return averageMark; } public void setAverageMark(int _averageMark) { averageMark = _averageMark; } //вывод информации о студенте в консоль public void println() { System.out.println(FIO + " " + group + " " + averageMark); } } |
Сортировка в Java с помощью Comparator
В методе main() главного класса приложения объявим коллекцию, которую впоследствии отсортируем:
1 |
ArrayList<Student> students = new ArrayList<Student>(); |
Напишем метод, заполняющий коллекцию students:
1 2 3 4 5 6 7 8 |
static void fillStudentsArrayList(ArrayList<Student> students) { students.add(new Student("Петров Г.В.", "ПИ-14", 68)); students.add(new Student("Иванов В.П.", "ПИ-14", 100)); students.add(new Student("Сидоров К.Н.", "ПИ-14", 53)); students.add(new Student("Шевцов П.В.", "ПИ-14", 65)); students.add(new Student("Николаев В.И.", "ПИ-14", 89)); } |
Теперь самое интересное. Сортировка коллекций Java производится с помощью метода Collections.sort(Коллекция, Comparator). Где Comparator — реализация одноименного интерфейса. Пример Java Comparator вы найдете чуть ниже.
Comparator (компаратор, «сравниватель») необходим для того, чтобы указать в нём признак, по которому метод sort будет сравнивать элементы коллекции. Сейчас мы приведем реализацию Comparator в Java, а потом поясним её подробнее.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//компаратор ("сравниватель") для сравнения студентов по среднему баллу static Comparator<Student> compareByAverageMark = new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { if(o1.getAverageMark() < o2.getAverageMark()) { return -1; } else if(o1.getAverageMark() > o2.getAverageMark()) { return 1; } else { return 0; } } }; |
В Компараторе вы описываете, как сравнить два объекта класса с помощью условного оператора if. При этом, если первый объект o1 меньше объекта o2, то необходимо возвратить отрицательное целое число с помощью оператора return. Если o1 по нужному признаку больше, чем o2, то надо вернуть положительное целое число. Если o1 равен o2, то необходимо возвратить ноль.
Сортировка в Java демонстрируется ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public static void main(String[] args) { ArrayList<Student> students = new ArrayList<Student>(); fillStudentsArrayList(students); for (Student s : students) { s.println(); } Collections.sort(students, compareByAverageMark); System.out.println(); System.out.println("Отсортированные данные:"); System.out.println(); for (Student s : students) { s.println(); } } |
Если необходимо отсортировать коллекцию в Java в обратном порядке, то воспользуйтесь оператором:
1 |
Collections.sort(students, Collections.reverseOrder(compareByAverageMark)); |
Скачать исходник программы из данного урока программирования, написанный на Java в NetBeans IDE, можно по ссылке:
Скачать исходник
Материалы по теме:
Поделиться в соц. сетях: