Collection - коллекция содержит набор объектов (элементов). Здесь определены основные методы для манипуляции с данными, такие как вставка (add, addAll), удаление (remove, removeAll, clear), поиск (contains)
List - неупорядоченная коллекцию, в которой допустимы дублирующие значения. Элементы такой коллекции пронумерованы, начиная от нуля, к ним можно обратиться по индексу.
Set - описывает неупорядоченную коллекцию, не содержащую повторяющихся элементов. Это соответствует математическому понятию множества (set).
Queue – предназначенна для хранения элементов в порядке, в порядке поступления (FIFO). Это упорядоченный список объектов, где вставка элементов происходит в конец списка, а удаление элементов — в начало списка. В дополнение к базовым операциям интерфейса Collection, очередь предоставляет дополнительные операции вставки, получения и контроля.
Между интерфейсом и конкретной реализацией коллекции существует несколько абстрактных классов. Это сделано для того, что бы вынести общий функционал в абстрактный класс, таким образом реализовать повторное использование кода.
ArrayList - инкапсулирует в себе обычный массив, длина которого автоматически увеличивается при добавлении новых элементов. Так как ArrayList использует массив, то время доступа к элементу по индексу минимально (В отличии от LinkedList). При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево, при этом реальный размер массива (его емкость, capacity) не изменяется.
LinkedList - Двусвязный список. Это структура данных, состоящая из узлов, каждый из которых содержит как собственно данные, так и две ссылки («связки») на следующий и предыдущий узел списка. Доступ к произвольному элементу осуществляется за линейное время (но доступ к первому и последнему элементу списка всегда осуществляется за константное время — ссылки постоянно хранятся на первый и последний, так что добавление элемента в конец списка вовсе не значит, что придется перебирать весь список в поисках последнего элемента).
HashSet - коллекция, не позволяющая хранить одинаковые объекты (как и любой Set). HashSet инкапсулирует в себе объект HashMap (использует для хранения хэш-таблицу). Хеш-таблица хранит информацию, используя так называемый механизм хеширования, в котором содержимое ключа используется для определения уникального значения, называемого хеш-кодом. Этот хеш-код затем применяется в качестве индекса, с которым ассоциируются данные, доступные по этому ключу. Преобразование ключа в хеш-код выполняется автоматически Выгода от хеширования состоит в том, что оно обеспечивает константное время выполнения методов add(), contains(), remove() и size() , даже для больших наборов.
Если Вы хотите использовать HashSet для хранения объектов СВОИХ классов, то вы ДОЛЖНЫ переопределить методы hashCode() и equals(), иначе два логически одинаковых объекта будут считаться разными, так как при добавлении элемента в коллекцию будет вызываться метод hashCode() класса Object (который скорее-всего вернет разный хэш-код для ваших объектов). Важно отметить, что класс HashSet не гарантирует упорядоченности элементов.
// Создать массив из n-элементов
ArrayList<Integer> arrli = new ArrayList<Integer>(n);
// Добавление элементов в массив последовательно
for (int i = 150; i <= 200; i+=10)
arrli.add(i);
// Добавление множества элементов возможно только из List, поэтому "костыль"
picture.addAll(Arrays.asList(1, 124, 56, -11, 23);
// Изменение элемента с индексом 3
arrli.set(3, -9999);
// Удаление элемента с индексом 3
arrli.remove(3);
// Печать всех элементов массива
for (int i = 0; i < arrli.size(); i++)
System.out.print(arrli.get(i) + " ");
// Создать приоритетную очередь
PriorityQueue<String> stringQueue = new PriorityQueue<>();
// Добавление элементов в очередь
stringQueue.add("blueberry");
stringQueue.add("apple");
stringQueue.add("cherry");
// Печать всех элементов
String first = stringQueue.poll(); System.out.print(first + " ");
String second = stringQueue.poll(); System.out.print(second + " ");
String third = stringQueue.poll(); System.out.print(third + " ");
Все методы интерфейса Queue:
Е element() - возвращает элемент из головы очереди. Элемент не удаляется. Если очередь пуста, инициируется исключение NoSuchElementException.
Е remove() - удаляет элемент из головы очереди, возвращая его. Инициирует исключение NoSuchElementException, если очередь пуста.
Е peek() - возвращает элемент из головы очереди. Возвращает null, если очередь пуста. Элемент не удаляется.
Е роll() - возвращает элемент из головы очереди и удаляет его. Возвращает null, если очередь пуста.
boolean offer(Е оbj) - пытается добавить оbj в очередь. Возвращает true, если оbj добавлен, и false в противном случае.
Сравните stack.pop() и queue.pop()
Deque<String> stack = new ArrayDeque<>();
stack.push("first");
stack.push("second");
Deque<String> queue = new ArrayDeque<>(2);
queue.add("first");
queue.add("second");
Set<String> hashset = new HashSet<>();
hashset.add("First");
hashset.add("Second");
hashset.add("Third");
Iterator<String> itr = hashset.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
2. Map - описывает коллекцию, состоящую из пар "ключ — значение". У каждого ключа только одно значение, что соответствует математическому понятию однозначной функции или отображения (hash). Такую коллекцию часто называют еще словарем (dictionary) или ассоциативным массивом (associative array).
HashMap не может содержать повторяющиеся ключи, допускает null-значения и null-ключ. HashMap — это неупорядоченная коллекция. Это не гарантирует какой-либо определенный порядок элементов.
LinkedHashMap — это хэш-таблица и реализация интерфейса Java Map на основе двусвязного списка . Он расширяет класс HashMap. Порядок итерации в LinkedHashMap обычно соответствует порядку вставки элементов. Однако он также предоставляет специальный конструктор, с помощью которого вы можете изменить порядок итерации с элемента, к которому обращались наименее недавно, на элемент, к которому обращались чаще всего, и наоборот.
Map<String, Integer> numberMapping = new HashMap<>();
// добавление элементов HashMap
numberMapping.put("One", 1);
numberMapping.put("Two", 2);
numberMapping.put("Three", 3);
LinkedHashMap<String, String> userCityMapping = new LinkedHashMap<>();
userCityMapping.put("Rajeev", "Bengaluru");
userCityMapping.put("Chris", "London");
userCityMapping.put("David", "Paris");
userCityMapping.put("Jesse", "California");
System.out.println("=== Iterating over a LinkedHashMap using Java 8 forEach and lambda ===");
userCityMapping.forEach((user, city) -> {
System.out.println(user + " => " + city);
});
TreeMap — это реализация интерфейса Java Map на основе красно-черного дерева .
Записи в TreeMap всегда сортируются на основе естественного порядка ключей или на основе пользовательского компаратора. TreeMap не может содержать повторяющиеся ключи. TreeMap не может содержать null-ключ.
SortedMap<String, String> fileExtensions = new TreeMap<>(new Comparator<String>() {
public int compare(String s1, String s2) {
return s2.compareTo(s1); }
});
/* The above TreeMap with custom Comparator can be simply written as -
SortedMap<String, String> fileExtensions = new TreeMap<>(Comparator.reverseOrder());
*/
fileExtensions.put("python", ".py");
fileExtensions.put("c++", ".cpp");
fileExtensions.put("kotlin", ".kt");
fileExtensions.put("golang", ".go");
fileExtensions.put("java", ".java");
// Printing the TreeMap (The keys will be sorted based on the supplied comparator)
System.out.println(fileExtensions);