Коллекции в Java

25,118 views
24,486 views

Published on

www.spro-club.ru

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
25,118
On SlideShare
0
From Embeds
0
Number of Embeds
751
Actions
Shares
0
Downloads
0
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Коллекции в Java

  1. 1. Структуры данных «Программы = алгоритмы + структуры данных» (Н. Вирт) Любая программа работает с данными Чем сложнее решаемая задача, тем более сложные требуются структуры данных Простейшая составная структура данных – массив однотипных элементов Обработка массивов, как правило, проста и быстра
  2. 2. Коллекции в Java Платформы Java содержат набор готовых классов, реализующих механизмы работы со структурами данных Такие классы называются коллекциями (collections) Хотя обработка массивов происходит быстрее, в ряде случаев требуется использовать коллекции
  3. 3. Предпосылки использования Необходимость динамического изменения размера структуры данных Динамическое добавление или удаление элемента Хранение разнотипных элементов (объектов) Извлечение и манипуляция данными из БД Хранение и работа со сложными структурами данных (деревьями, списками, стеками, хеш- таблицами и т.д.) и т.п.
  4. 4. Базовые интерфейсы и классы Интерфейс Collection предназначен для хранения однородных элементов. Его расширяют интерфейсы:  List – список  Set – множество  Queue – очередь Интерфейс Map предназначен для создания коллекций, хранящих пары «ключ-значение». Его реализуют классы:  HashMap  IdentityHashMap  LinkedHashMap
  5. 5. Иерархия классов и интерфейсов коллекций <<interface>> Collection <<interface>> +add Map +addAll +clear +clear +contains +containsKey +containsAll +containsValue <<interface>> +equals +entrySet Iterator +hashCode +equals +isEmpty +get +iterator +hashCode <<interface>> +isEmpty +remove ListIterator +keySet +removeAll +retainAll +put +size +putAll +toArray +remove +values <<interface> <<interface>> <<interface>> <<interface>> > List Queue SortedMap Set HashTable HashMap <<interface>> <<interface>> Deque SortedSet ArrayList LinkedList PriorityQueu TreeMap Properties LinkedHashM e apHashSet TreeSet ArrayDequ e
  6. 6. Специфика хранения элементов Коллекции могут хранить только ссылки на объекты. Примитивные типы могут быть сохранены в коллекции и извлечены из неё за счёт автоматических операций упаковки и распаковки в классы-оболочки (Boxing и Unboxing, с Java SE 5) Начиная с версии Java SE 5, коллекции стали типизированными и при их создании рекомендуется указывать тип объектов, кот. будут храниться в нейArrayList<String> arr = new ArrayList<String>();
  7. 7. Методы интерфейса Collection boolean add(Object o) – Добавляет элемент в коллекцию; возвращает true если элемент был добавлен, и false, если коллекция не позволяет сохранять дубликаты, а добавляемый элемент таковым является. boolean addAll(Collection coll) – Добавляет все элементы в коллекцию; возвращает true если какой-либо элемент был добавлен. void clear() – Удаляет из коллекции все элементы. При этом те элементы, на кот. имеются ссылки у других элементов, не удаляются из памяти. boolean contains(Object o) – Возвращает true если коллекция содержит заданный элемент.
  8. 8. Методы интерфейса Collection(продолжение) boolean containsAll(Collection<?> coll) – Возвращает true если коллекция содержит все элементы из coll. boolean equals(Object o) – Возвращает true если сравниваемые коллекции равны. int hashCode() – Возвращает значение хэш кода для данной коллекции. Для любого класса, для которого переопределен метод Object.equals() должен быть переопределен метод Object.hashCode() boolean isEmpty() – Возвращает true если коллекция не содержит элементов.
  9. 9. Методы интерфейса Collection(продолжение) Iterator iterator() – Возвращает ссылку на объект Iterator, который позволяет выполнить эффективное, последовательное прохождение по всем элементам коллекции. boolean remove(Object o) – Удаляет из коллекции одиночный экземпляр элемента o; возвращает true, если коллекция содержит такой элемент. boolean removeAll(Collection<?> coll) – Удаляет их коллекции все элементы, которые также находятся в коллекции coll; возвращает true если какой-либо элемент удален. Никакие элементы в результирующей коллекции не будут равны элементам коллекции coll. Параметр coll необязателен.
  10. 10. Пример работы с итераторамиList compon = Arrays.asList(this.getComponents());for (Iterator iter=compon.iterator(); iter.hasNext(); ) { Object elem = (Object) iter.next(); System.out.println(“Компонент: ”, elem.toString();}
  11. 11. Методы интерфейса Collection(продолжение) boolean retainAll(Collection<?> coll) – Оставляет в коллекции только те из входящих в неё элементов, которые входят в коллекции coll; возвращает true, если исходная коллекция изменена. int size() – Возвращает количество элементов в коллекции. Object[] toArray() – Возвращает массив, содержащий все элементы данной коллекции.
  12. 12. Методы интерфейса Collection(продолжение) <T> T[] toArray(T[] a) – Возвращает массив, содержащий все элементы данной коллекции; тип возвращаемого массива таков, как тип заданного массива. Если коллекция вмещается в заданный массив, она возвращается в массиве. В противном случае размещается массив с типом времени выполнения для заданного массива и размером равным размеру коллекции. String toString() – Возвращает строку со списком элементов коллекции в квадратных скобках, через запятую и пробел
  13. 13. Интерфейс List - список Представляет собой неупорядоченную коллекцию, в которой допустимы дублирующие значения Классы, реализующие List:  LinkedList – связанный список, можно вставлять элементы только в начало и конец  ArrayList – динамический массив с произвольной вставкой и удалением элементов Элементы, находящиеся в коллекции List проиндексированы
  14. 14. Методы интерфейса List <T>Elem get(int i) – Возвращает ссылку на элемент списка под номером i int indexOf(<T> obj) – Возвращает индекс (номер) элемента obj. Если объект не найден, возвращает -1. ListIterator listIterator([int i]) – Возвращает итератор списка с дополнительными возможностями (по сравнению с Iterator). Если указан параметр i, то итератор будет позиционирован на элемент с индексом i
  15. 15. Методы интерфейса List boolean remove(int i) – удаляет из списка элемент с номером i. set(int i, <T> obj) – заменяет элемент с номером i на указанный элемент obj List subList(i1, i2) – возвращает ссылку на подсписок, содержащий элементы исходного списка с номерами от i1 до i2
  16. 16. Методы класса Collections Collections.addAll(c,e1,e2,…,en) – добавляет в коллекцию c произвольное число элементов e1, …, en frequency(c, obj) – возвращает число вхождений элемента obj в коллекцию с reverse(list) – обращает порядок следования элементов в списке list sort(list) – сортирует список в порядке возрастания элементов. Сравнение идёт с помощью вызова метода e1.compareTo(e2) для элементов списка e1, e2
  17. 17. Класс LinkedList порожден от класса AbstractSequentialList Реализация связанного двунаправленного списка – каждый элемент ссылается на предыдущий и на последующий элементы Есть методы addFirst() и addLast() Создаётся типизированная коллекция, в которой могут храниться только элементы типа String: LinkedList<String> list = new LinkedList<String>(); Любая попытка внести в список ссылку на объект другого типа приведет к ошибке компиляции: list.add( new Double(12.4) );
  18. 18. Пример использования LinkedListimport java.util.*;public class TestList { public static void main(String args[]){ String s = "test"; LinkedList<String> list = new LinkedList<String>(); list.add( "is" ); Результат: list.add( "is" ); list.add( "a" ); [This, is, is, a, a, null, test] list.add( "a" ); The size of the Collection is : 7 list.add( null ); This is is a a null test list.addLast( s ); list.addFirst("This"); // list.add( new Double(12.4) ); ошибка компиляции System.out.println( list ); displayCollection( list ); } static void displayCollection( Collection<String> items ) { final String BLANK = " "; System.out.println("The size of the Collection is : " +items.size()); StringBuilder sb = new StringBuilder(); for( String s : items ) sb.append( s ).append( BLANK ); System.out.println( sb.toString() ); }}
  19. 19. ArrayList порожден от класса AbstractList для реализации списка, основанного на динамически изменяющемся массиве Нет методы addFirst() и addLast(), но есть метод void add( int index, E element ) для вставки элемента в произвольную позицию
  20. 20. Пример использования LinkedList. . . public static void main(String args[]){ String s = "test"; List<String> list = new ArrayList<String>(); list.add( "is" ); list.add( "is" ); Результат: list.add( "a" ); list.add( "a" ); [This, is, is, a, a, null, test] list.add( null ); The size of the Collection is : 7 list.add( list.size(), s ); This is is a a null test list.add( 0, "This"); // list.add( new Double(12.4) ); ошибка компиляции System.out.println( list ); displayCollection( list ); }. . .

×