Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

}

public int compareTo(CompType rv) {

return (i < rv.i ?
– 1 : (i == rv.i ? 0 : 1));

}

private static Random r = new Random(47); public static Generator<CompType> generatorO { return new Generator<CompType> { public CompType nextO {

return new CompType(r.nextInt(100),r.nextInt(100));

}

}:

}

public static void main(String[] args) { CompType[] a =

Generated, array (new CompType[12], generatorO); print("перед сортировкой;"); pri nt(Arrays.toStri ng(a)); Arrays.sort(a); print("после

сортировки;");

print(Arrays.toString(a)); продолжение &

}

} /* Output: перед сортировкой:

[[1 = 58, j = 55], [i = 93. j = 61]. [i =61. j = 29] . [i = 68, j = 0], [i = 22, j = 7]. [i = 88, j = 28] , [i = 51, j = 89], [i = 9, j = 78], [i = 98. j = 61]

, [i = 20, j = 58]. [i = 16, j = 40], [i - 11. j - 22] ]

после сортировки:

CCi = 9. j = 78], [i - 11. j - 22], [i - 16. j - 40]

. [i = 20. j = 58]. [i = 22, j = 7]. [i = 51. j = 89]

. [i = 58. j = 55]. [i =61. j = 29]. [i = 68. j = 0]

. [i = 88. j = 28]. [i = 93. j = 61]. [i = 98. j = 61] ]

*///:-

Определяя метод сравнения, вы несете полную ответственность за принятие решения о его результатах. В приведенном примере в сравнении используются только значения i, а значения j игнорируются.

Метод generator производит объект, реализующий интерфейс Generator, создавая анонимный внутренний класс. Объект строит объекты CompType, инициализируя их случайными значениями. В main генератор заполняет массив CompType, который затем сортируется. Если интерфейс Comparable не реализован, то при попытке вызова sort произойдет исключение ClassCastException. Это объясняется тем, что sort преобразует свой аргумент к типу Comparable.

Теперь представьте, что вы получили класс, который не реализует интерфейс Comparable... а может быть, реализует, но вам не нравится, как он работает, и вы хотели бы задать для типа другой метод сравнения. Для решения проблемы создается отдельный класс, реализующий интерфейс Comparator. Он содержит два метода, compare и equals. Впрочем, вам практически никогда не придется реализовывать equals — разве что при особых требованиях по быстродействию, потому что любой создаваемый класс неявно наследует от класса Object метод equals.

Класс Collections содержит метод reverseOrder, который создает Comparator для порядка сортировки, обратного по отношению к естественному. Он может быть применен к CompType:

//: arrays/Reverse.java

// Метод Col lections.reverseOrderO

import java util *;

i mport net.mi ndvi ew.uti1.*,

import static net.mindview.util.Print.*;

public class Reverse {

public static void main(String[] args) { CompTypeC] a = Generated.array(

new CompType[12], CompType generatorO); print("перед

сортировкой "); print(Arrays.toString(a)). Arrays.sort(a. Col lections. reverseOrderO). print("после сортировки:"); pri nt(Arrays.toStri ng(a));

} /* Output: перед сортировкой:

[[i = 58. j = 55]. [i = 93. j = 61]. [i =61. j = 29] . [i = 68. j = 0]. [i = 22. j = 7]. [i - 88. j - 28] . [i = 51. j = 89]. [i = 9. j = 78]. [i = 98. j = 61]

. [i = 20. j = 58]. [i =16. j = 40]. [i - 11. j - 22] ]

после сортировки:

[[i - 98. j - 61]. [i =93. j = 61]. [i =88. j = 28] . [i = 68. j = 0]. [i = 61. j = 29]. [i = 58. j = 55] . [i = 51. j = 89]. [i = 22. j = 7]. [i = 20. j = 58]

. [i = 16. j = 40]. [i = 11. j = 22]. [i = 9. j = 78] ]

*///:-

Наконец, вы можете написать собственную реализацию Comparator. В следующем примере объекты CompType сравниваются по значениям]' вместо i:

//: arrays/ComparatorTest.java

// Реализация Comparator

import java.util.*:

import net.mindview.util.*:

import static net.mindview.util.Print.*:

class CompTypeComparator implements Comparator<CompType> { public int compare(CompType ol. CompType o2) {

return (ol.j < o2.j ?
– 1 : (ol.j == o2.j ? 0 : 1)):

}

}

public class ComparatorTest {

public static void main(String[] args) { CompTypeC] a = Generated.array(

new CompType[12], CompType.generatorO); print("перед сортировкой:"): print(Arrays.toString(a)): Arrays.sort(a. new CompTypeComparatorO); print("после сортировки:"): print(Arrays.toString(a));

}

} /* Output: перед сортировкой:

[[i = 58. j = 55]. [i = 93. j = 61]. [i = 61. j = 29] . [i = 68. j = 0]. [i = 22. j = 7]. [i = 88. j = 28] . [i = 51. j = 89]. [i = 9. j = 78]. [i = 98. j = 61]

. [i = 20. j = 58]. [i = 16. j = 40]. [i = 11. j = 22] ]

после сортировки:

[[1 = 68. j = 0]. [i = 22. j = 7]. [i - 11. j - 22]

. [i = 88. j = 28]. [i = 61. j = 29]. [i = 16. j = 40]

. [i = 58. j = 55]. [i = 20. j = 58]. [i = 93. j = 61]

. [i = 98. j = 61]. [i = 9. j = 78]. [i = 51. j = 89] ]

Сортировка массива

Встроенные средства сортировки позволяют отсортировать любой массив примитивов, любой массив объектов, реализующих Comparable или ассоциированных с объектом Comparator1. Следующий пример генерирует случайные объекты String и сортирует их:

//: arrays/StringSorting.java // Sorting an array of Strings, import java.util *; import net.mindview.util.*, import static net.mindview.util.Print *; public class StringSorting {

public static void main(String[] args) {

Поделиться:
Популярные книги

Банковское право

Рождественская Татьяна Эдуардовна
Деловая литература:
банковское дело
5.00
рейтинг книги
Банковское право

"Фантастика 2025-31". Компиляция. Книги 1-27

Трофимов Ерофей
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-31. Компиляция. Книги 1-27

Егерь. Сердце стаи. Книга 5

Скиба Николай
5. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
6.80
рейтинг книги
Егерь. Сердце стаи. Книга 5

Газлайтер. Том 9

Володин Григорий Григорьевич
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Том 2. Рассказы и пьесы 1904-1907

Андреев Леонид Николаевич
2. Собрание сочинений в шести томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 2. Рассказы и пьесы 1904-1907

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Интернет-журнал "Домашняя лаборатория", 2008 №2

Журнал «Домашняя лаборатория»
Дом и Семья:
хобби и ремесла
сделай сам
5.00
рейтинг книги
Интернет-журнал Домашняя лаборатория, 2008 №2

Неожиданность

Попов Борис
Фантастика:
альтернативная история
5.00
рейтинг книги
Неожиданность

Коротков

Гладков Теодор Кириллович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Коротков

Князь Андер Арес 3

Грехов Тимофей
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Князь Андер Арес 3

Болшевцы

Сборник
Документальная литература:
биографии и мемуары
6.00
рейтинг книги
Болшевцы

Том 4. Повести и рассказы, статьи 1844-1854

Тургенев Иван Сергеевич
4. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 4. Повести и рассказы, статьи 1844-1854

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Советы по Delphi. Версия 1.4.3 от 1.1.2001

Граф в законе (сборник)

Смирнов Владимир
Терра - детектив
Детективы:
криминальные детективы
5.00
рейтинг книги
Граф в законе (сборник)