Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2010

Коллекции: Vector, Set, Map, Hash, Iterator, Collections, Arrays

Зачастую в программе работа идет не с одним объектом, а с целой группой более или менее однотипных экземпляров (например, автопарк организации). Проще всего сделать это с помощью массивов. Однако, несмотря на то, что это достаточно эффективное решение для многих случаев, оно имеет некоторые ограничения. Так, обращаться к элементу массива можно только по его номеру (индексу). Также необходимо заранее задать длину массива и больше ее не менять. Существует несколько различных типов классов-коллекций. Все они разрабатывались, по возможности, в соответствии с единой логикой и определенными интерфейсами и там, где это возможно, работа с ними унифицирована. Однако все коллекции отличаются внутренними механизмами хранения, временем доступа и манипуляции элементами, потребляемой памятью и другими деталями. Классы, обеспечивающие манипулирование коллекциями объектов, объявлены в пакете java.util.

Интерфейсы

Интерфейс Collection

Данный интерфейс является корнем всей иерархии классов-коллекций. Он определяет базовую функциональность любой коллекции – набор методов, которые позволяют добавлять, удалять, выбирать элементы коллекции. Классы, которые реализуют интерфейс Collection, могут содержать дубликаты и пустые (null) значения.

Интерфейс Set

Классы, которые реализуют этот интерфейс, не допускают наличия дубликатов! В коллекции этого типа разрешено наличие только одной ссылки типа null. Интерфейс Set расширяет интерфейс Collection, таким образом, любой класс, имплементирующий Set, реализует все методы, определенные в Collection. Любой объект, добавляемый в Set, должен реализовать метод equals, чтобы его можно было сравнить с другими.

Интерфейс List

Классы, реализующие этот интерфейс, содержат упорядоченную последовательность объектов (объекты хранятся в том порядке, в котором они были добавлены. Интерфейс List расширяет интерфейс Collection, и любой класс, имплементирующий List, реализует все методы, определенные в Collection, и в то же время вводятся новые методы, которые позволяют добавлять и удалять элементы из списка. List также обеспечивает ListIterator, который позволяет перемещаться как вперед, так и назад по элементам списка.

Интерфейс Map

Классы, которые реализуют этот интерфейс, хранят неупорядоченный набор объектов парами ключ/значение. Каждый ключ должен быть уникальным. Интерфейс Map не расширяет интерфейс Collection!

Интерфейс Iterator

Классы, реализующие интерфейс Iterator, позволяют перемещаться как вперед, так и назад по элементам коллекции. Все классы, которые реализуют интерфейс Collection, должны реализовать метод iterator, который возвращает объект, реализующий интерфейс Iterator. В интерфейсе Iterator определен метод remove, который позволяет удалить объект из коллекции, для которой Iterator был создан.

Основные методы:

public boolean hasNext() – возвращает true, если есть еще непросмотренные элементы public Object next() – возвращает следующий просматриваемый элемент public voi remove() – удаляет из коллекции последний элемент, который вернул итератор.

Классы

класс ArrayList

Java.util.ArrayList – реализует интерфейс List и представляет список. Объекты хранятся в порядке добавления. Можно добавлять и удалять элементы из любого места списка.

Основные методы:

public void add(Object element) – добавляет элемент в список public void add(int index, Object element) – добавляет элемент в список перед элементом с индексом index public Object remove(int index) – удаляет из списка элемент с заданным индексом public Object get(int index) – возвращает элемент по индексу public Object set(int index, Object element) – заменяет элемент с индексом index на новый элемент. public int size() – возвращает размер списка

Пример

   1 ArrayList<String> people = new ArrayList<String>();
   2 people.add(“Ivanov”);
   3 people.add(“Petrov”);
   4 people.add(1, “Sidorov”);
   5 for (int i = 0; i < people.size(); i++)
   6         S.o.p(people.get(i));

класс HashMap

java.util.HashMap –предназначен для хранения пар объектов ключ/значение. Как для ключей, так и для элементов допускаются значения типа null. HashMap обеспечивает быстрый доступ к элементам. Порядок хранения элементов в этой коллекции не совпадает с порядком их добавления. Порядок элементов в коллекции также может меняться во времени.

Основные методы: public Object put(Object key, Object value)- добавляет элемент с заданным ключом и значением public Object get(Object key) - извлекает значение по заданному ключу public Set keySet() - возвращает множество ключей public Collection values() - возвращает множество значений

Пример

   1 HashMap<String, String> telBoook = new Hashtable<String, String> ();
   2 telBoook.put(“Petrov”, “222-33-44”);
   3 telBoook.put(“Ivanov”, “111-22-33”);
   4 for(String name: telBook.keySet()){
   5         S.o.p(name + “ ” + telBook.get(name) );
   6 }

класс TreeMap

java.util.TreeMap – реализует интерфейс SortedMap. TreeMap содержит ключи в порядке возрастания. Используется либо натуральное сравнение ключей, либо должен быть реализован интерфейс Comparable. Реализация алгоритма поиска обеспечивает логарифмическую зависимость времени выполнения основных операций (containsKeygetput и remove). Запрещено применение null` значений для ключей! При использовании дубликатов ключей ссылка на объект, сохраненный с таким же ключом, будет утеряна! Например:

   1       TreeMap<String, Integer> tm = new TreeMap<String, Integer> ();
   2       tm.put("key4",10);
   3       tm.put("key1",20);
   4       tm.put("key3",30);
   5           for(String key: tm.keySet()){
   6           S.o.p(key + “ ” + telBook.get(key) );
   7       }

Класс Collections

Класс Collections является классом-утилитой и содержит несколько вспомогательных методов для работы с классами, обеспечивающими различные интерфейсы коллекций. Например, для сортировки элементов списков:

   1 
   2 Collections.sort(people);

Класс Arrays

Статический класс Arrays обеспечивает набор методов для выполнения операций над массивами, таких, как поиск, сортировка, сравнение.

   1 String[] arr = new String[people.size()];
   2 people.toArray(arr);
   3 Arrays.sort(arr);