Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

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

Сортировка в 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 и т.п.


Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95