Начнём с такой вот хорошей таблицы:
Интерфейс | Hash table реализация | Resizable array реализация | Tree реализация | Linked list реализация | Hash table + Linked list реализация |
---|---|---|---|---|---|
Set |
HashSet |
TreeSet |
LinkedHashSet |
||
List |
ArrayList |
LinkedList |
|||
Queue |
LinkedList |
||||
Map |
HashMap |
TreeMap |
LinkedHashMap |
Из этой таблицы очень хорошо видны основные интерфейсы и реализации коллекций в Java. Также существуют интерфейсы SortedSet и SortedMap, имеющие только TreeSet и TreeMap реализации соответственно. Интерфейс Queue (очередь) имеет также специфическую реализацию PriorityQueue (приоритетная очередь, куча). А теперь пройдемся по основным интерфейсам и их реализациям более подробно.
Set:
Set - есть ни что иное, как множество(логично). Хранит только уникальные значения.
HashSet - элементы не упорядочены. Это объясняется тем, что используется хэширование для ускорения выборки. Так что используйте HashSet если порядок элементов не важен, т.к. поиск в нём самый быстрый.
LinkedHashSet - элементы хранятся в порядке добавления. Добавление элемента, эквивалентного хранящемуся во множестве, не изменяет порядка.
TreeSet - элементы упорядочены в естественном порядке.
List:
ArrayList - аналог обычного массива, но с динамически изменяемым размером. Используйте, если нужен доступ к элементу по индексу и добавление в конец списка или удаление из конца.
LinkedList - список. Используется, если необходимо добавление/удаление в произвольном месте списка. Однако поиск медленней, чем в ArrayList.
Queue:
LinkedList - очередь, на основе списка. Структура данных "очередь", работает по принципу FIFO(First-In-First-Out) - "первый пришёл - первый вышел", т.е. добавление элемента происходит в конец очереди, а выборка из начала, причем при выборке элемент удаляется.
Map:
Map - ассоциативные контейнеры. В Map'е хранится ключ и связанное с ним значение.
Характеристика реализаций аналогична множеству.
Ну и конечно же, примеры использования всего этого добра:
import java.util.*; public class CollectionsExample { public static void main(String []args){ Set<Integer> hSet = new HashSet<Integer>(); Set<Integer> tSet = new TreeSet<Integer>(); Set<Integer> lhSet = new LinkedHashSet<Integer>(); Random rand = new Random(38); for (int i = 0; i < 10; ++i){ int t = rand.nextInt(100); hSet.add(t); tSet.add(t); lhSet.add(t); System.out.print(t + " "); } System.out.println("\nHashSet: " + hSet); System.out.println("TreeSet: " + tSet); System.out.println("LinkedHashSet: " + lhSet); System.out.println("hSet.contains(25) " + hSet.contains(25)); List<Integer> aList = new ArrayList<Integer>(); List<Integer> lList = new LinkedList<Integer>(); for (int i = 0; i<10; ++i){ int t = rand.nextInt(100); aList.add(t); lList.add(t); } lList.add(2,rand.nextInt(100)); //index,element System.out.println("ArrayList: " + aList); System.out.println("LinkedList: " + lList); System.out.println("aList.get(4) " + aList.get(4)); Queue<Integer> queue = new LinkedList<Integer>(); queue.add(2); queue.add(5); queue.add(1); System.out.println("Queue: " + queue); System.out.println("queue.element() " + queue.element()); System.out.println("Queue: " + queue); System.out.println("queue.remove() " + queue.remove()); System.out.println("Queue: " + queue); Map<Integer,String> map = new HashMap<Integer, String>(); map.put(1,"one"); map.put(2,"two"); System.out.println("HashMap: " + map); System.out.println("map.containsKey(1) " + map.containsKey(1)); System.out.println("map.containsValue(\"three\") " + map.containsValue("three")); System.out.println("map.get(2) " + map.get(2)); } }
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.