|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Й индексЙ индекс 19.0 18.0 17.0 16.0 15 14 13 12 11 10 [13, 15, 16.0, 17.0, 18.0, 19.0, 71] 13 15 16.0 17.0 18.0 19.0 71:size= 7 size= 2 При реализации интерфейса Comparator<T> существует возможность сортировки списка объектов конкретного типа по правилам, определенным для этого типа. Для этого необходимо реализовать метод int compare(T ob1, /* пример # 6: авторская сортировка списка: UniqSortMark.java */ package chapt10; import java.util.Comparator;
public class Student implements Comparator<Student> { private int idStudent; private float meanMark;
public Student(float m, int id) { meanMark = m; idStudent = id; } public Student() { } public float getMark() { return meanMark; } public int getIdStudent() { return idStudent; } // правило сортировки public int compare(Student one, Student two) { Return (int)(Math.ceil(two.getMark() - one.getMark())); } } package chapt10; import java.util.*;
public class UniqSortMark { public static void main(String[] args) { ArrayList<Student> p = new ArrayList<Student>(); p.add(new Student(3.9f, 52201)); p.add(new Student(3.65f, 52214)); p.add(new Student(3.71f, 52251)); p.add(new Student(3.02f, 52277)); p.add(new Student(3.81f, 52292)); p.add(new Student(9.55f, 52271)); // сортировка списка объектов try { Collections.sort(p, Student. class. newInstance ()); } catch (InstantiationException e1) { //невозможно создать объект класса e1.printStackTrace(); } catch (IllegalAccessException e2) { e2.printStackTrace(); } for (Student ob: p) System.out.printf("%.2f ", ob.getMark()); } } В результате будет выведено: 9,55 3,90 3,81 3,71 3,65 3,02 Метод boolean equals(Object obj) интерфейса Comparator<T>, который обязан выполнять свой контракт, возвращает true только в случае если соответствующий метод compare() возвращает 0. Для создания возможности сортировки по другому полю id класса Student следует создать новый класс, реализующий Comparator по новым правилам. /* пример # 7: другое правило сортировки: StudentId.java */ package chapt10;
public class StudentId implements Comparator<Student> { public int compare(Student one, Student two) { return two.getIdStudent() - one.getIdStudent(); } } При необходимости сортировки по полю id в качестве второго параметра следует объект класса StudentId: Collections.sort(p, StudentId.class. newInstance ()); Параметризация коллекций позволяет разрабатывать безопасные алгоритмы, создание которых потребовало бы несколько больших затрат в предыдущих версиях языка. Deque Интерфейс Deque определяет «двунаправленную» очередь и, соответственно, методы доступа к первому и последнему элементам двусторонней очереди. Методы обеспечивают удаление, вставку и обработку элементов. Каждый из этих методов существует в двух формах. Одни методы создают исключительную ситуацию в случае неудачного завершения, другие возвращают какое-либо из значений (null или false в зависимости от типа операции). Вторая форма добавления элементов в очередь сделана специально для реализаций Deque, имеющих ограничение по размеру. В большинстве реализаций операции добавления заканчиваются успешно. В следующим примере реализована работа с интерфейсом Deque. Методы addFirst(), addLast() вставляют элементы в начало и в конец очереди соответственно. Метод add() унаследован от интерфейса Queue и абсолютно аналогичен методу addLast() интерфейса Deque. /* пример # 8: демонстрация Deque: DequeRunner.java */ package chapt10; import java.util.*;
public class DequeRunner { public static void printDeque(Deque<?> d){ for (Object de: d) System. out. println(de + "; "); } public static void main(String[] args) { Deque<String> deque = new ArrayDeque<String>(); deque.add(new String("5")); deque.addFirst("A"); //deque.addLast(new Integer(5));//ошибка компиляции System. out. println(deque.peek()); System. out. println("Before:"); printDeque (deque); deque.pollFirst(); System. out. println(deque.remove(5)); System. out. println("After:"); printDeque (deque); } } В результате на консоль будет выведено: A Before: A; 5; False After: 5; Множества Интерфейс Set<E> объявляет поведение коллекции, не допускающей дублирования элементов. Интерфейс SortedSet<E> наследует Set<E> и объявляет поведение набора, отсортированного в возрастающем порядке, заранее определенном для класса. Интерфейс NavigableSet существенно облегчает поиск элементов. Рис. 10.2. Иерархия наследования множеств Класс HashSet<E> наследуется от абстрактного суперкласса Конструкторы класса: Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |