Начнём с такой вот хорошей таблицы:
| Интерфейс | 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));
}
}
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.