div.main {margin-left: 20pt; margin-right: 20pt}
Сортировка в Java - легко!
Временами сортировка массивов простых типов в Java заставляет нас
потрудиться. Не говоря о сортировке массивов объектов. Теперь же мы можем
сортировать и массивы простых типов и массивы объектов, написав относительно
малый код, с помощью интерфейса Comparable.
java.util.Comparable это класс, содержащий определение правильного
порядка двух объектов. Это применимо только для небольшого числа классов,
которые по умолчанию реализованы в интерфейсе Comparable. Один из них - это
класс String. В реализации интерфейса Comparable класс String перегружает метод
compareTo(Object obj). Метод compareTo(Object obj) возвращает отрицательное
integer, ноль или положительное integer, когда текущее значение меньше чем,
равно, или больше чем полученный объект.
Ваша работа уже выполнена за вас в классе String. Тем не менее,
если вы хотите обеспечить способность сортировки ваших собственных классов,
тогда вы должны реализовать(implement) Comparable и перегружать compareTo(Object
obj) самостоятельно. Ниже следует простой пример, в котором определен класс
Student. Каждый Student содержит studentid, first_name, last_name. Согласно
нашим спецификациям Student можно сортировать по student_id.
import java.util.*;
public class Student implements Comparable
{
public int student_id;
public String last_name;
public String first_name;
public Student(int student_id, String last_name, String first_name)
{
this.student_id = student_id;
this.last_name = last_name;
this.first_name = first_name;
}
/* Перегрузка метода compareTo */
public int compareTo(Object obj)
{
Student tmp = (Student)obj;
if(this.student_id < tmp.student_id)
{
/* текущее меньше полученного */
return -1;
}
else if(this.student_id > tmp.student_id)
{
/* текущее больше полученного */
return 1;
}
/* текущее равно полученному */
return 0;
}
}
Теперь, когда в классе Student перегружен метод compareTo(Object
obj), мы легко можем сортировать массив объектов типа Student. Здесь
использовался класс java.util.Array и его статический метод sort. Метод main
добавлен, чтобы продемонстрировать, как это будет работать.
public static void main(String[] args)
{
/* Создание массива объектов Student */
Student[] students = new Student[3];
students[0] = new Student(52645,"Smith","Bob");
students[1] = new Student(98765,"Jones","Will");
students[2] = new Student(1354,"Johnson","Matt");
/* Сортировка массива */
Arrays.sort(students);
/* Печать отсортированных значений */
for(int i = 0; i < students.length; i++)
{
System.out.println(students[i].student_id +
students[i].last_name + students[i].first_name);
}
}
Действительно просто? Чуть-чуть работы и класс Student можно
заставить сортировать по комбинации полей. Например, вы захотите сортировать
сначала по last_name, а затем по student_id. Не забывайте, что класс Arrays
может сортировать любой массив, включая массив элементов простых типов. Для
простых типов, однако, нет необходимости в реализации (implement) Comparable. И
без этого очень легко сортировать int, float и т.п.
|