Программирование. Программирование на Java Конспект лекций (ИТМО 2010). Справочник по языку Java и может использоваться как конспект лекционного курса Системы программирования Интернетприложений
Скачать 0.85 Mb.
|
120 • - ограничивает T сверху — в качестве формального параметра могут быть использованы только потомки класса Number; • - ограничивает T снизу — могут быть использованы только предки класса Integer В ограничении могут быть использованы символы '&' и '|' для объединения условий соответствующими логическими операциями. Wildcard Wildcard (дословно джокер) или групповая подстановка – синтаксические конструкции с использованием символа '?' (означает любой тип), используемые для замены в шаблонах конкретного класса множеством возможных классов. Групповая подстановка обычно используется для создания шаблонных классов: /* * Допустимые параметры: * Square s (Square extends Shape) — можно * String str — нельзя */ static void drawAll(Collection extends Shape> c) { for(Shape s : c) { s.draw(); } } Коллекции Коллекции – это классы для сохранения, получения, манипулирования данными над множеством объектов. Иерархия коллекций представлена на рис. 23. Iterator Iterator – интерфейс, позволяющий выполнять обход элементов коллекции с возможностью их удаления. Является переработкой и развитием интерфейса Enumeration 121 boolean hasNext(); Возвращает true если в коллекции есть еще элементы. E next(); Следующий элемент. void remove(); Удалить элемент. Использование Iterator вместо Enumeration является предпочтительным из-за более короткого описания методов и появившейся операции remove. Класс ListIterator осуществляет двунаправленное перемещение по коллекции. Рисунок 23. Иерархия коллекций. 122 HashSet HashSet Collection java.lang.Interable ArrayList ArrayList AbstractCollection AbstractList List Set AbstractSet AbstractQueue Queue AbstractSequentialList Vector Vector LinkedList LinkedList SortedSet NavigableSet EnumSet EnumSet TreeSet TreeSet Deque Collections Collections PriorityQueue PriorityQueue ArrayDeque ArrayDeque Stack Stack LinkedHashSet LinkedHashSet Iterator ListIterator Map Sorted Map Navigable Map HashMap Hash Map Abstract Map EnumMap Enum Map TreeMap Tree Map LinkedHashSet LinkedHashSet WeakHashMap WeakHashMap IdentityHashMap IdentityHashMap Map.Entry Abstract Map. SimpleEntry Abstract Map.Simpl eImmutableEntry< K,V> Collection Collection – интерфейс, описывающий набор каких-либо элементов. Способ организации элементов определяется реализующими Collection классами и интерфейсами. int size() Возвращает размер коллекции. boolean isEmpty() Возвращает true , если в коллекции нет элементов. boolean contains(Object o) Возвращает true , если коллекция содержит элемент. Iterator Возвращает Iterator Object[] toArray(); Преобразует коллекцию в массив объектов. Преобразует в коллекцию в массив типа T , размещая в массиве a boolean add(E e); Добавляет элемент в коллекцию. Возвращает true , если элемент добавлен; false — если коллекция запрещает дубликаты элементов и элемент не уникален. boolean remove(Object o); Удаляет один элемент (даже если таких несколько). Возвращает true , если элемент удален. boolean containsAll(Collection> c); Возвращает true , если коллекция содержит все элементы заданной коллекции. boolean addAll (Collection extends E> c); Добавляет элементы в коллекцию. Возвращает true , если коллекция изменена в результате операции. boolean removeAll (Collection> c); Удаляет все элементы, заданные в коллекции с boolean retainAll (Collection> c); Удаляет из коллекции все элементы, кроме тех, которые заданы в коллекции с void clear(); Удаляет из коллекции все элементы. boolean equals(Object o); Проверяет коллекцию на равенство другой коллекции int hashCode(); Возвращает хеш-код коллекции. В потомках интерфейса Collection допускается реализация не всех методов. В таком случае необходимо генерировать исключительную ситуацию UnsupportedOperationException 123 Любая коллекция должна возвращать итератор, и соответственно, позволять обходить свои элементы. Интерфейсы коллекций Set Множество. Элементы уникальны и, возможно, отсортированы. List Cортированная последовательность элементов, с возможностью дублирования и позиционного доступа. Queue Очередь, предназначенная для размещения элемента перед его обработкой. Расширяет коллекцию методами для вставки, выборки и просмотра элементов. Deque Двунаправленная очередь, позволяющая вставку и удаление в два конца очереди. Map Карта это соответствие ключ — значение. Каждому ключу соответствует одно значение. SortedSet Множество, элементы которого автоматически сортируются либо в их натуральном порядке (интерфейс Comparable ), либо с использованием Comparator SortedMap Автоматически сортированная карта (см. SortedSet ) Navigable Set SortedSet , расширенный методами кратчайшего доступа к искомому элементу. В NavigableSet элементы могут быть доступны в порядке увеличения и уменьшения Navigable Map SortedMap , расширенный методами кратчайшего доступа к искомому элементу В пакете java.util.concurrent доступны дополнительные интерфейсы BlockingQueue , BlockingDeque (ограниченное число элементов и ожидание освобождения места), ConcurrentMap , ConcurrentNavigableMap (атомарные операции вставки, удаления, замены). Для уменьшения трудоемкости реализации существуют общие интерфейсы реализации коллекций - AbstractCollection , AbstractMap и др. представляющие тривиальную реализацию основных методов коллекций. Коллекции общего назначения HashSet Реализация множества с использованием хеш-таблиц, обладающая самым высоким быстродействием TreeSet Реализация NavigableSet интрефейса с использованием раскрашеных деревьев 124 LinkedHashSet Реализация множества в виде хеш таблицы и дву- связанного списка с заданным порядком элементов ArrayList Массив переменного размера. Является потоко- небезопасным Vector . Наиболее высокое быстродействие ArrayDeque Эффективная реализация интерфейса Deque переменного размера LinkedList Двусвязная реализация интерфейса List. Быстрее ArrayList , если элементы часто добавляются и удаляются. В дополнение реализует интерфейс Deque PriorityQueue Реализация очереди с приоритетами HashMap Реализация интерфейса Map с использованием хеш таблиц TreeMap Реализация NavigableMap интрефейса с использованием раскрашеных деревьев LinkedHashMap Реализация карты в виде хеш таблицы и дву-связанного списка с заданным порядком элементов В дополнение к общим реализациям, существуют прародители коллекций - классы Vector и Hashtable , реализация которых была обновлена с использованием шаблонов. Специальные коллекции WeakHashMap Карта, сохраняющие слабые ссылки на ключи. Позволяет сборщику мусора уничтожить пару ключ- значение, когда на на ключ более нет внешних ссылок IdentityHashMap Реализация интерфейса Map с использованием хеш таблицы и сравнением объекта на равенстов по ссылке ( key1==key2 ), вместо сравнения по значению ( key1.equials(key2) ). CopyOnWriteArray List Реализация List, в которой операции - мутаторы ( add, set, remove ) реализуются путем создания новой копии List . В результате нет необходимости в синхронизации. CopyOnWriteArray Set Реализация Set c созданием новой копии по операции изменения (см. CopyOnWriteArrayList ) EnumSet Высокопроизводительная реализация множества с использованием битового вектора. Все элементы должны быть элементами одного Enum EnumMap Высокопроизводительная реализация карты с 125 использованием битового вектора. Все ключи должны быть элементами одного Enum Пакета java.util.concurrent дополняет реализации коллекций классами ConcurrentLinkedQueue, LinkedBlockingQueue, ArrayBlockingQueue, PriorityBlockingQueue, DelayQueue, SynchronousQueue, LinkedBlockingDeque, ConcurrentHashMap, ConcurrentSkipListSet, ConcurrentSkipListMap, которые подготовлены для использования в многопоточных программах и реализуют различную дополнительную функциональность. Сортировка элементов коллекции Сортировка элементов коллекции в интерфейсе SortedMap и аналогичных производится при помощи естественного порядка сортировки, определяемого в элементе коллекции, либо при помощи интерфейса Comparator Естественный порядок сортировки (natural sort order) — естественный и реализованный по умолчанию (реализацией метода compareTo интерфейса java.lang.Comparable ) способ сравнения двух экземпляров одного класса. int compareTo(E other) — сравнивает this объект с other и возвращает отрицательное значение если this . Для класса Byte данный метод реализуется следующим образом: public int compareTo(Byte anotherByte) { return this.value - anotherByte.value; } java.util.Comparator — содержит два метода: • int compare(T o1, T o2) — сравнение, аналогичное compareTo • boolean equals(Object obj) — true если оbj это Comparator и у него такой же принцип сравнения. Collections Collections — класс, состоящий из статических методов, осуществляющих различные служебные операции над коллекциями. 126 sort(List) Cортировать список, используя merge sort алгоритм, с гарантированной скоростью O (n*log n). 127 binarySearch(List, Object) Бинарный поиск элементов в списке. reverse(List) Изменить порядок элементов в списке на противоположный. shuffle(List) Случайно перемешать элементы. fill(List, Object) Заменить каждый элемент заданным. copy(List dest, List src) Скопировать список src в dst min(Collection) Вернуть минимальный элемент коллекции. max(Collection) Вернуть максимальный элемент коллекции. rotate(List list, int distance) Циклически повернуть список на указанное число элементов. replaceAll(List list, Object oldVal, Object newVal) Заменить все объекты на указанные. indexOfSubList(List source, List target) Вернуть индекс первого подсписка source , который эквивалентен target lastIndexOfSubList(L ist source, List target) Вернуть индекс последнего подсписка source , который эквивалентен target swap(List, int, int) Заменить элементы в указанных позициях списка. unmodifiableCollecti on (Сollection) Создает неизменяемую копию коллекции. Существуют отдельные методы для Set , List , Map , и т.д. synchronizedCollecti on (Collection) Создает потоко-безопасную копию коллекции. Существуют отдельные методы для Set, List, Map, и т.д. checkedCollection (Collection Class Создает типо-безопасную копию коллекции, предотвращая появление неразрешенных типов в коллекции. Существуют отдельные методы для Set , List , Map , и т.д. Создает неизменяемый Set , содержащую только заданный объект. Существуют методы для List и Маp Создает неизменяемый List , содержащий n копий заданного объекта. frequency(Collection , Object) Подсчитать количество элементов в коллекции. 128 reverseOrder() Вернуть Comparator , которые предполагает обратный порядок сортировки элементов. list(Enumeration Вернуть Enumeration в виде ArrayList disjoint(Collection, Collection) Определить, что коллекции не содержат общих элементов. addAll(Collection super T>, T[]) Добавить все элементы из массива в коллекцию. newSetFromMap(Map) Создать Sеt из Map asLifoQueue(Deque) Создать Last in first out Queut представление из Deque 129 В 2009 году Университет стал победителем многоэтапного конкурса, в результате которого определены 12 ведущих университетов России, которым присвоена категория «Национальный исследовательский университет». Министерством образования и науки Российской Федерации была утверждена Программа развития государственного образовательного учреждения высшего профессионального образования «Санкт-Петербургский государственный университет информационных технологий, механики и оптики» на 2009–2018 годы. КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ Кафедра Вычислительной техники СПбГУ ИТМО создана в 1937 году и является одной из старейших и авторитетнейших научно-педагогических школ России. Первоначально кафедра называлась кафедрой математических и счетно- решающих приборов и устройств и занималась разработкой электромеханических вычислительных устройств и приборов управления. Свое нынешнее название кафедра получила в 1963 году. Кафедра вычислительной техники является одной из крупнейших в университете, на которой работают высококвалифицированные специалисты, в том числе 8 профессоров и 15 доцентов, обучающие около 500 студентов и 30 аспирантов. Гаврилов Антон Валерьевич Клименков Сергей Викторович Цопа Евгений Алексеевич Программирование на Java Конспект лекций В авторской редакции Редакционно-издательский отдел Санкт-Петербургского государственного университета информационных технологий, механики и оптики Зав. РИО Н.Ф. Гусарова Лицензия ИД № 00408 от 05.11.99 Подписано к печати Заказ № Тираж Отпечатано на ризографе Редакционно-издательский отдел Санкт-Петербургского государственного университета информационных технологий, механики и оптики 197101, Санкт-Петербург, Кронверкский пр., 49 |