Реальный пиарJavaScriptПишем на JavaScript → Сортировка в Java - легко!

Сортировка в Java - легко!

C String

Временами сортировка массивов простых типов в 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 и т.п.


Источник: http://www.javaportal.ru

Рекомендуем



Java-приложение: заглянем внутрь Итак, наш план прост: создав альтернативные стандартные потоки, упакуем их поудобнее и придумаем комфортабельный интерфейс доступа к ним, что, собственно говоря, и является главной целью всей этой работы


C++ и Java: совместное использование Несмотря на то, что использование JNI в большинстве случаев ведет к потере многоплатформенности JAVA-кода, данная возможность расширяет сферу применения самого языка JAVA на приложения, для которых это условие не является необходимым


jQuery - что это такое Широко бытовало мнение, что шаблонизация рациональна только средствами серверных языков программирования, но jQuery, благодаря развитому механизму обработки событий, позволил уже на уровне javascript отделить логику от представления