SlideShare a Scribd company logo
Коллекции в Java
Структуры данных
 «Программы = алгоритмы + структуры данных»
    (Н. Вирт)
   Любая программа работает с данными
   Чем сложнее решаемая задача, тем более сложные
    требуются структуры данных
   Простейшая составная структура данных – массив
    однотипных элементов
   Обработка массивов, как правило, проста и быстра
Коллекции в Java
 Платформы Java содержат набор готовых классов,
  реализующих механизмы работы со структурами
  данных
 Такие классы называются коллекциями
  (collections)
 Хотя обработка массивов происходит быстрее, в
  ряде случаев требуется использовать коллекции
Предпосылки использования
 Необходимость динамического изменения размера
    структуры данных
   Динамическое добавление или удаление элемента
   Хранение разнотипных элементов (объектов)
   Извлечение и манипуляция данными из БД
   Хранение и работа со сложными структурами
    данных (деревьями, списками, стеками, хеш-
    таблицами и т.д.)
   и т.п.
Базовые интерфейсы и классы
 Интерфейс Collection предназначен для хранения
 однородных элементов. Его расширяют интерфейсы:
   List – список
   Set – множество
   Queue – очередь
 Интерфейс Map предназначен для создания коллекций,
 хранящих пары «ключ-значение». Его реализуют
 классы:
   HashMap
   IdentityHashMap
   LinkedHashMap
Иерархия классов и интерфейсов
          коллекций            <<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                                                    ap

HashSet             TreeSet                                               ArrayDequ
                                                                              e
Специфика хранения элементов
 Коллекции могут хранить только ссылки на
  объекты.
 Примитивные типы могут быть сохранены в
  коллекции и извлечены из неё за счёт
  автоматических операций упаковки и распаковки в
  классы-оболочки (Boxing и Unboxing, с Java SE 5)
 Начиная с версии Java SE 5, коллекции стали
  типизированными и при их создании
  рекомендуется указывать тип объектов, кот. будут
  храниться в ней
ArrayList<String> arr = new ArrayList<String>();
Методы интерфейса Collection
 boolean add(Object o) – Добавляет элемент в
 коллекцию; возвращает true если элемент был добавлен, и
 false, если коллекция не позволяет сохранять дубликаты, а
 добавляемый элемент таковым является.

 boolean addAll(Collection coll) – Добавляет все
 элементы в коллекцию; возвращает true если какой-либо
 элемент был добавлен.

 void clear() – Удаляет из коллекции все элементы. При
 этом те элементы, на кот. имеются ссылки у других
 элементов, не удаляются из памяти.

 boolean contains(Object o) – Возвращает true если
 коллекция содержит заданный элемент.
Методы интерфейса Collection
(продолжение)
 boolean containsAll(Collection<?> coll) –
 Возвращает true если коллекция содержит все элементы из
 coll.

 boolean equals(Object o) – Возвращает true если
 сравниваемые коллекции равны.

 int hashCode() – Возвращает значение хэш кода для
 данной коллекции. Для любого класса, для которого
 переопределен метод Object.equals() должен быть
 переопределен метод Object.hashCode()

 boolean isEmpty() – Возвращает true если коллекция
 не содержит элементов.
Методы интерфейса Collection
(продолжение)
 Iterator iterator() – Возвращает ссылку на объект
  Iterator, который позволяет выполнить эффективное,
  последовательное прохождение по всем элементам коллекции.

 boolean remove(Object o) – Удаляет из коллекции
  одиночный экземпляр элемента o; возвращает true, если
  коллекция содержит такой элемент.

 boolean removeAll(Collection<?> coll) – Удаляет их
  коллекции все элементы, которые также находятся в коллекции
  coll; возвращает true если какой-либо элемент удален. Никакие
  элементы в результирующей коллекции не будут равны элементам
  коллекции coll. Параметр coll необязателен.
Пример работы с итераторами
List compon = Arrays.asList(this.getComponents());

for (Iterator iter=compon.iterator(); iter.hasNext(); ) {
       Object elem = (Object) iter.next();
       System.out.println(“Компонент: ”, elem.toString();
}
Методы интерфейса Collection
(продолжение)
 boolean retainAll(Collection<?> coll) – Оставляет в
  коллекции только те из входящих в неё элементов, которые входят
  в коллекции coll; возвращает true, если исходная коллекция
  изменена.

 int size() – Возвращает количество элементов в коллекции.


 Object[] toArray() – Возвращает массив, содержащий все
  элементы данной коллекции.
Методы интерфейса Collection
(продолжение)
 <T> T[] toArray(T[] a) – Возвращает массив, содержащий
  все элементы данной коллекции; тип возвращаемого массива
  таков, как тип заданного массива. Если коллекция вмещается в
  заданный массив, она возвращается в массиве. В противном случае
  размещается массив с типом времени выполнения для заданного
  массива и размером равным размеру коллекции.

 String toString() – Возвращает строку со списком элементов
  коллекции в квадратных скобках, через запятую и пробел
Интерфейс List - список
 Представляет собой неупорядоченную коллекцию,
  в которой допустимы дублирующие значения
 Классы, реализующие List:
   LinkedList – связанный список, можно вставлять
    элементы только в начало и конец
   ArrayList – динамический массив с произвольной
    вставкой и удалением элементов
 Элементы, находящиеся в коллекции List
 проиндексированы
Методы интерфейса List
 <T>Elem get(int i) – Возвращает ссылку на
  элемент списка под номером i
 int indexOf(<T> obj) – Возвращает индекс
  (номер) элемента obj. Если объект не найден,
  возвращает -1.
 ListIterator listIterator([int i]) –
  Возвращает итератор списка с дополнительными
  возможностями (по сравнению с Iterator). Если указан
  параметр i, то итератор будет позиционирован на
  элемент с индексом i
Методы интерфейса List
 boolean remove(int i) – удаляет из списка
  элемент с номером i.
 set(int i, <T> obj) – заменяет элемент с номером
  i на указанный элемент obj
 List subList(i1, i2) – возвращает ссылку на
  подсписок, содержащий элементы исходного списка с
  номерами от i1 до i2
Методы класса Collections
 Collections.addAll(c,e1,e2,…,en) – добавляет в
  коллекцию c произвольное число элементов e1, …, en
 frequency(c, obj) – возвращает число вхождений
  элемента obj в коллекцию с
 reverse(list) – обращает порядок следования
  элементов в списке list
 sort(list) – сортирует список в порядке возрастания
  элементов. Сравнение идёт с помощью вызова метода
  e1.compareTo(e2) для элементов списка e1, e2
Класс LinkedList
 порожден от класса AbstractSequentialList
 Реализация связанного двунаправленного списка –
  каждый элемент ссылается на предыдущий и на
  последующий элементы
 Есть методы addFirst() и addLast()
 Создаётся типизированная коллекция, в которой
  могут храниться только элементы типа String:
 LinkedList<String> list = new LinkedList<String>();
 Любая попытка внести в список ссылку на объект
  другого типа приведет к ошибке компиляции:
 list.add( new Double(12.4) );
Пример использования LinkedList
import 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() );
   }
}
ArrayList
 порожден от класса AbstractList для
  реализации списка, основанного на динамически
  изменяющемся массиве
 Нет методы addFirst() и addLast(), но есть метод
  void add( int index, E element ) для вставки
  элемента в произвольную позицию
Пример использования 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 );
   }
. . .

More Related Content

PPTX
Java Core. Lecture# 4. Collections.
PPTX
Collections
PDF
Scala and LiftWeb presentation (Russian)
PDF
PPTX
Основы Java. 4. Collection Framework
PDF
Очень вкусный фрукт Guava
PDF
[JAM 1.1] Clean Code (Paul Malikov)
PPT
Java Core. Lecture# 4. Collections.
Collections
Scala and LiftWeb presentation (Russian)
Основы Java. 4. Collection Framework
Очень вкусный фрукт Guava
[JAM 1.1] Clean Code (Paul Malikov)

What's hot (16)

PDF
Sergii Tsypanov "Performance 1001 Tips"
PPT
Лекция 3 Элементарные структуры данных Часть 1
PDF
Scala on android
PPT
9. java lecture library
PPT
10. java lecture generics&collections
ODP
PDF
Scala
PPTX
C#. От основ к эффективному коду
PPTX
Функциональное программирование на F#
PDF
AlgoCollections (RUS)
PDF
Магия метаклассов
PDF
8 встреча — Язык программирования Python (В. Ананьев)
ODP
Charming python sc2-8
PDF
Python dict: прошлое, настоящее, будущее
PPTX
PDF
Обработка текста на Haskell - это просто!
Sergii Tsypanov "Performance 1001 Tips"
Лекция 3 Элементарные структуры данных Часть 1
Scala on android
9. java lecture library
10. java lecture generics&collections
Scala
C#. От основ к эффективному коду
Функциональное программирование на F#
AlgoCollections (RUS)
Магия метаклассов
8 встреча — Язык программирования Python (В. Ананьев)
Charming python sc2-8
Python dict: прошлое, настоящее, будущее
Обработка текста на Haskell - это просто!
Ad

Similar to Коллекции в Java (7)

PPT
Java. Интерфейс Set - наборы (множества) и его реализации.
PPT
Java. Интерфейс Map - ассоциативные массивы.
ODP
Контейнеры и хранение объектов в ООП
PPT
Msu.Center.Lectures.J04 Std Libs
PPT
04 Стандартная Библиотека
PDF
Лекция 6. Хеш-таблицы
PDF
Лекция 6: Хеш-таблицы
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Map - ассоциативные массивы.
Контейнеры и хранение объектов в ООП
Msu.Center.Lectures.J04 Std Libs
04 Стандартная Библиотека
Лекция 6. Хеш-таблицы
Лекция 6: Хеш-таблицы
Ad

More from metaform (16)

PPTX
Создание графического интерфейса пользователя мобильных Android приложений (ч...
PPTX
Приступаем к разработке Android приложений
PPTX
работа с потоками ввода вывода
PPTX
обработка исключений в Java
PPTX
Классы и объекты в Java
PPTX
создание живых сайтов
PPTX
Работа с БД в Java
PPTX
Составление резюме
PPTX
Лекция 6_принципы ООП : инкапсуляция, наследование
PPTX
Классы и объекты в Java
PPTX
Массивы в Java
PPTX
Базовые операторы Java
PDF
Глава 3: примитивные типы и операции с ними в Java
PDF
Глава 2: Среда разработки NetBeans
PDF
Глава1: Обзор технологии Java
PPT
Мастерство речи, искусство презентации
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Приступаем к разработке Android приложений
работа с потоками ввода вывода
обработка исключений в Java
Классы и объекты в Java
создание живых сайтов
Работа с БД в Java
Составление резюме
Лекция 6_принципы ООП : инкапсуляция, наследование
Классы и объекты в Java
Массивы в Java
Базовые операторы Java
Глава 3: примитивные типы и операции с ними в Java
Глава 2: Среда разработки NetBeans
Глава1: Обзор технологии Java
Мастерство речи, искусство презентации

Коллекции в Java

  • 2. Структуры данных  «Программы = алгоритмы + структуры данных» (Н. Вирт)  Любая программа работает с данными  Чем сложнее решаемая задача, тем более сложные требуются структуры данных  Простейшая составная структура данных – массив однотипных элементов  Обработка массивов, как правило, проста и быстра
  • 3. Коллекции в Java  Платформы Java содержат набор готовых классов, реализующих механизмы работы со структурами данных  Такие классы называются коллекциями (collections)  Хотя обработка массивов происходит быстрее, в ряде случаев требуется использовать коллекции
  • 4. Предпосылки использования  Необходимость динамического изменения размера структуры данных  Динамическое добавление или удаление элемента  Хранение разнотипных элементов (объектов)  Извлечение и манипуляция данными из БД  Хранение и работа со сложными структурами данных (деревьями, списками, стеками, хеш- таблицами и т.д.)  и т.п.
  • 5. Базовые интерфейсы и классы  Интерфейс Collection предназначен для хранения однородных элементов. Его расширяют интерфейсы:  List – список  Set – множество  Queue – очередь  Интерфейс Map предназначен для создания коллекций, хранящих пары «ключ-значение». Его реализуют классы:  HashMap  IdentityHashMap  LinkedHashMap
  • 6. Иерархия классов и интерфейсов коллекций <<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 ap HashSet TreeSet ArrayDequ e
  • 7. Специфика хранения элементов  Коллекции могут хранить только ссылки на объекты.  Примитивные типы могут быть сохранены в коллекции и извлечены из неё за счёт автоматических операций упаковки и распаковки в классы-оболочки (Boxing и Unboxing, с Java SE 5)  Начиная с версии Java SE 5, коллекции стали типизированными и при их создании рекомендуется указывать тип объектов, кот. будут храниться в ней ArrayList<String> arr = new ArrayList<String>();
  • 8. Методы интерфейса Collection  boolean add(Object o) – Добавляет элемент в коллекцию; возвращает true если элемент был добавлен, и false, если коллекция не позволяет сохранять дубликаты, а добавляемый элемент таковым является.  boolean addAll(Collection coll) – Добавляет все элементы в коллекцию; возвращает true если какой-либо элемент был добавлен.  void clear() – Удаляет из коллекции все элементы. При этом те элементы, на кот. имеются ссылки у других элементов, не удаляются из памяти.  boolean contains(Object o) – Возвращает true если коллекция содержит заданный элемент.
  • 9. Методы интерфейса Collection (продолжение)  boolean containsAll(Collection<?> coll) – Возвращает true если коллекция содержит все элементы из coll.  boolean equals(Object o) – Возвращает true если сравниваемые коллекции равны.  int hashCode() – Возвращает значение хэш кода для данной коллекции. Для любого класса, для которого переопределен метод Object.equals() должен быть переопределен метод Object.hashCode()  boolean isEmpty() – Возвращает true если коллекция не содержит элементов.
  • 10. Методы интерфейса Collection (продолжение)  Iterator iterator() – Возвращает ссылку на объект Iterator, который позволяет выполнить эффективное, последовательное прохождение по всем элементам коллекции.  boolean remove(Object o) – Удаляет из коллекции одиночный экземпляр элемента o; возвращает true, если коллекция содержит такой элемент.  boolean removeAll(Collection<?> coll) – Удаляет их коллекции все элементы, которые также находятся в коллекции coll; возвращает true если какой-либо элемент удален. Никакие элементы в результирующей коллекции не будут равны элементам коллекции coll. Параметр coll необязателен.
  • 11. Пример работы с итераторами List compon = Arrays.asList(this.getComponents()); for (Iterator iter=compon.iterator(); iter.hasNext(); ) { Object elem = (Object) iter.next(); System.out.println(“Компонент: ”, elem.toString(); }
  • 12. Методы интерфейса Collection (продолжение)  boolean retainAll(Collection<?> coll) – Оставляет в коллекции только те из входящих в неё элементов, которые входят в коллекции coll; возвращает true, если исходная коллекция изменена.  int size() – Возвращает количество элементов в коллекции.  Object[] toArray() – Возвращает массив, содержащий все элементы данной коллекции.
  • 13. Методы интерфейса Collection (продолжение)  <T> T[] toArray(T[] a) – Возвращает массив, содержащий все элементы данной коллекции; тип возвращаемого массива таков, как тип заданного массива. Если коллекция вмещается в заданный массив, она возвращается в массиве. В противном случае размещается массив с типом времени выполнения для заданного массива и размером равным размеру коллекции.  String toString() – Возвращает строку со списком элементов коллекции в квадратных скобках, через запятую и пробел
  • 14. Интерфейс List - список  Представляет собой неупорядоченную коллекцию, в которой допустимы дублирующие значения  Классы, реализующие List:  LinkedList – связанный список, можно вставлять элементы только в начало и конец  ArrayList – динамический массив с произвольной вставкой и удалением элементов  Элементы, находящиеся в коллекции List проиндексированы
  • 15. Методы интерфейса List  <T>Elem get(int i) – Возвращает ссылку на элемент списка под номером i  int indexOf(<T> obj) – Возвращает индекс (номер) элемента obj. Если объект не найден, возвращает -1.  ListIterator listIterator([int i]) – Возвращает итератор списка с дополнительными возможностями (по сравнению с Iterator). Если указан параметр i, то итератор будет позиционирован на элемент с индексом i
  • 16. Методы интерфейса List  boolean remove(int i) – удаляет из списка элемент с номером i.  set(int i, <T> obj) – заменяет элемент с номером i на указанный элемент obj  List subList(i1, i2) – возвращает ссылку на подсписок, содержащий элементы исходного списка с номерами от i1 до i2
  • 17. Методы класса Collections  Collections.addAll(c,e1,e2,…,en) – добавляет в коллекцию c произвольное число элементов e1, …, en  frequency(c, obj) – возвращает число вхождений элемента obj в коллекцию с  reverse(list) – обращает порядок следования элементов в списке list  sort(list) – сортирует список в порядке возрастания элементов. Сравнение идёт с помощью вызова метода e1.compareTo(e2) для элементов списка e1, e2
  • 18. Класс LinkedList  порожден от класса AbstractSequentialList  Реализация связанного двунаправленного списка – каждый элемент ссылается на предыдущий и на последующий элементы  Есть методы addFirst() и addLast()  Создаётся типизированная коллекция, в которой могут храниться только элементы типа String:  LinkedList<String> list = new LinkedList<String>();  Любая попытка внести в список ссылку на объект другого типа приведет к ошибке компиляции:  list.add( new Double(12.4) );
  • 19. Пример использования LinkedList import 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() ); } }
  • 20. ArrayList  порожден от класса AbstractList для реализации списка, основанного на динамически изменяющемся массиве  Нет методы addFirst() и addLast(), но есть метод void add( int index, E element ) для вставки элемента в произвольную позицию
  • 21. Пример использования 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 ); } . . .