Популярные коллекции в Java

Добавлено: 22/08/2015 06:27 |  Обновлено: 19/08/2017 11:37 |  Добавил: nick |  Просмотры: 5169 Комментарии: 0
Вводная часть
Коллекции в Java – это различные структуры данных. В свою очередь, структурами данных можно назвать любые организованные данные. Здесь я расскажу о трех наиболее востребованных коллекциях в Java.
Lists, Sets, Maps – это интерфейсы, созданные для удобной работы с данными.

ArrayList – это самая популярная реализация List. ArrayList использует индексирование. ArrayList дает возможность вставлять дубликаты. Например, это может быть список повторяющихся цифр: 32, 10, 13, 32, 10, 13.

Создается ArrayList с помощью конструкции (для чисел):
ArrayList myArrayList = new ArrayList<>();
Добавление элемента в ArrayList выполняется с помощью следующей конструкции:
myArrayList.add(32);
myArrayList.add(10);
Все элементы добавляются в конец списка.

Когда мы выбираем элемент из ArrayList мы используем конструкцию:
myArrayList.get(индекс);
Когда мы удаляем элемент из ArrayList мы используем конструкцию:
myArrayList.remove(индекс);
При этом каждый элемент списка сопоставляется с удаляемым элементом, и, если они равны, найденный элемент удаляется.

Проверяем существует ли элемент (для числа 10):
myArrayList.contains(10);
Вывести все элементы ArrayList можно с помощью цикла:
for (int i = 0; i < myArrayList.size(); i++) {
    int value = myArrayList.get(i);
    System.out.println("Элемент: " + value);
}
Еще одна реализация интерфейса List – это LinkedList. У LinkedList также как и у ArrayList есть индексация. Добавление, удаление и проверка на существование элемента производится с помощью тех же конструкций, что и у ArrayList. Но кроме этого LinkedList использует технологию указателя. Что это такое? В списке, у нас всегда есть первый и последний элемент. Чтобы получить их вы можете воспользоваться конструкциями:
myLinkedList.getFirst();
myLinkedList.getLast();
Если у нас только один элемент в списке, то указатель первого и последнего элементов будет указывать на один и тот же элемент. Если мы добавим новый элемент, то указатель на первый элемент останется прежним, а указатель на последний сдвинется на позицию нового элемента. Но кроме этого первый элемент будет хранить указатель на следующий элемент.

Так, например, чтобы вывести все элементы списка можно воспользоваться обычным циклом, используя индексы, как в случае с ArrayList. А можно вывести все элементы по очереди, используя указатель следующего элемента:
ListIterator myListIterator = myLinkedList.listIterator();
while (myListIterator.hasNext()) {
    System.out.println("Элемент: " + myListIterator.next());
}
Технология с указателем выигрывает по производительности по сравнению с технологией с индексированием, например, в том случае, когда у вас большой массив элементов и вам нужно вставлять элементы не в конец массива, а в разные его части. Или, например, при удалении первого элемента из массива также проявляется выигрыш в производительности у LinkedList.

Стоит также заметить, что ArrayList и LinkedList оба не синхронизированы.

Set – это набор элементов, в котором не должно быть дубликатов. Set – это также интерфейс. Set соответствует математическому понятию множества.

HashSet – реализует интерфейс Set. Добавление в HashSet производится с помощью следующей конструкции (например, для чисел):
myHashSet.add(32); 
myHashSet.add(10); 
Удаление (например, для чисел):
myHashSet.remove(32);
Проверяем существует ли элемент (например, для чисел):
myHashSet.contains(32);
Разница с List состоит в том, что производится дополнительная проверка, на предмет существования добавляемого элемента в коллекции. Это делается по-умолчанию. Также важно помнить, что HashSet не гарантирует порядок хранения элементов, в котором их добавили. Причина этого кроется в алгоритме хэшированного хранения данных. Но если вы все-таки хотите сохранить порядок, то нужно использовать TreeSet.

Вывести все элементы можно следующей конструкцией (для чисел):
Iterator myListIterator = myHashSet.iterator();
while (myListIterator.hasNext()) {
    System.out.println("Элемент: " + myListIterator.next());
}
Map – это также интерфейс, описывающий коллекцию, состоящую из пар «ключ – значение». Такую коллекцию еще называют ассоциативным массивом.

Рассмотрим HashMap. Здесь также используется алгоритм хэшированного хранения данных.

Для добавления элемента используется конструкция:
myHashMap.put(ключ, значение);
Если вы добавляете новый элемент с тем же самым ключом, то старое значение затирается новым.

Для выбора элемента используется конструкция:
myHashMap.get(ключ);
Для удаления элемента используется конструкция:
myHashMap.remove(ключ);
Вывести все элементы можно следующей конструкцией (для чисел):
for (Integer key: myHashMap.keySet()) {
    System.out.println("ключ: " + key);
    System.out.println("значение: " + myHashMap.get(key));
}

Оставьте свой комментарий

Комментариев нет