Collections. Коллекции в Java.

 

Collections. Коллекции в Java.

Image

Collections

Iterable<E>

class Main {
    void printAll(Iterable<?> iterable) {
        Iterator<?> iterator = iterable.iterator();
        while (iterator.hasNext()) {
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
    
    /* Сокращенная запись. */
    void printAll(Iterable<?> iterable) {
        for (Object obj : iterable) {
            System.out.println(obj);
        }
    }
}

Свой Iterable

import java.util.Iterator;
import java.util.NoSuchElementException;

class Main {
    static <T> Iterable<T> nCopies(T value, int count) {
        if (count < 0) {
            throw new IllegalArgumentException("Negative count: " + count);
        }
        return () -> new Iterator<T>() {
            int rest = count;

            @Override
            public boolean hasNext() {
                return rest > 0;
            }

            public T next() {
                if (rest == 0)
                    throw new NoSuchElementException();
                rest--;
                return value;
            }
        };
    }
}

Image

Collections< E > extends Iterable< E >

  • int size();
  • boolean isEmpty();
  • boolean contains(Object o);
  • boolean containsAll(Collection<?> c);
  • Object[] toArray();
  • <T> T[] toArray(T[] a);
  • boolean add(E e);
  • boolean remove(Object o);
  • boolean addAll(Collection<? extends E> c);
  • boolean removeAll(Collection<?> c);
  • boolean retainAll(Collection<?> c);
  • void clear();

List< E > extends Collection< E >

  • boolean addAll(int index, Collection<? extends E> c);
  • void sort(Comparator<? super E> c);
  • E get(int index);
  • E set(int index, E element);
  • void add(int index, E element);
  • E remove(int index); / boolean remove(Object o);
  • int indexOf(Object o);
  • int lastIndexOf(Object o);
  • ListIterator<E> listIterator();
  • ListIterator<E> listIteraor(int index);
  • List<E> subList(int fromIndex, int toIndex);

ListIterator< E > extends Iterator< E >

  • boolean hasPrevious();
  • E previous();
  • int nextIndex();
  • int previousIndex();
  • void set(E e);
  • void add(E e);

Стандартные списки

  • ArrayList - изменяемый список общего назначения
  • Arrays.asList - изменяемая обертка над массивом
  • Collections.emptyList() - неизменяемый пустой список
  • Collections.singletonList(x) - неизменяемый список из одного элемента
  • Collections.nCopies(n, x) - неизменяемый список из n одинаковых элементов
  • List.of(…) - (java 9) неизменяемый список из указанных элементов(или массива), null не приемлет
  • List.copyOf(…) - (java 10) неизменяемая копия указанного списка
  • Collections.unmodifiableList(list) - неизменяемая обертка над списком
  • Collections.synchronizedList(list) - синхронизированная обертка над списком
  • Collections.checkedList(list, type) - проверяемая обертка

Стандартные множества

  • HashSet - изменяемое неупорядоченное множество общего назначения
  • LinkedHashSet - изменяемое упорядоченное (ordered) множество общего назначения
  • TreeSet - изменяемое сортированное (sorted) множество
  • EnumSet - изменяемое множество элементов Enum
  • Collections.emptySet() - неизменяемое пустое множество
  • Collections.singletone(x) - неизменяемое множество из одного элемента
  • Set.of(…) - (java 9) некпорядоченное неизменяемое множество заданных элементов(без null и повторов)
  • Set.copyOf(…) - (java 10) неизменяемая копия
  • Collections.unmodifiableSet(set) - неизменяемая обертка над множеством
  • Collections.synchronizedSet(set) - синхронизированная обертка над множеством
  • Collections.checkedSet(set, type) - проверяемая обертка

HashSet

  • Использует hashCode и расширяемую hash-таблицу (table[obj.hashCode() % table.length])
  • При коллизии формирует связный список
  • Если коллизий много, то формирует RB-дерево (красно-черное дерево)

TreeSet

TreeSet< E > implements NavigableSet< E >

  • first(), last()
  • headSet(), tailSet(), subset()
  • floor(E), ceiling(E)
  • higher(E), lower(E)
  • descendingSet()
  • descendingIterator()

Queue

Queue< E > extends Collection< E >

  • offer/add
  • poll/remove
  • peek/element

offer/poll/peek - Возвращают null/false, если не вышло

add/remove/element - Кидают исключения, если не вышло

Deque

Deque< E > extends Queue< E >

  • offerFirst/addFirst
  • offerLast/addLast
  • pollFirst/removeFirst
  • pollLast/removeLast
  • peekFirst/getFirst
  • peekLast/getLast

Стандартные очереди

  • ArrayDeque - изменяемая очередь общего назначения
  • PriorityQueue - изменяемая очередь с приоритетом (heap-based)

Image

!!! Не надо использовать !!!

  • Enumeration -> Iterator
  • Vector -> ArrayList
  • Stack -> ArrayDeque
  • Dictionary -> Map
  • Hashtable -> HashMap
  • LinkedList -> ArrayList/ArrayDeque