Collections Flashcards

1
Q

var

A
можно вместо типа локальной переменной (но не аргументов методов) использовать var (при этом это не защищенное слово, однако защищенный тип, то есть нельзя назвать класс и т.д. так же). 
Тип var определяется во время инициализации и не может быть изменен (ошибка компиляции). Также нельзя с var делать только объявление без инициализации (var a; - ошибка компиляции). Так как компайлер именно в строчке объявления не сможет определить тип. Также нельзя инициализировать null-ом без кастинга (var a = null; -не компилируется, а var b = (String) null - компилируется). 
Также почему-то нельзя использовать множественное объявление и инициализацию с var (var a = 3, b=2;)
var можно инициализировать коллекцией с diamond operator- тип генерика при этом автоматом определится как Object.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Методы Collection

A

1) boolean add(E element) - добавляет элемент, и если вставить невозможно (например в сете), то возвращает false
2) boolean remove(Object obj) - удаляет первое совпадение с объектом (по equals) объекта из коллекции если он там есть, иначе возвращает false
3) isEmpty()
4) size()
5) clear()
6) contains(Object o) ищет по equals
7) Object[] toArray() or E[] toArray(E[]) Если размер массива меньше необходимого то он автоматически расширяется. Все элементы существующие удаляются
8) removeIf(Predicate)
9) forEach(Consumer)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Фабричные методы создания коллекций

A

1) Arrays.asList (varArgs) сохраняется двухсторонняя связь по ссылке между массивом и списком. Список не является обычным Arraylist а является объектом внутреннего класса Arrays с фиксированным размером (remove,add выкинут исключения, однако set разрешен).
2) List.of() - альтернатива Arrays.asList- возвращает immutable list- c 11 джавы
3) List.copyOf(collection)- создает immutable копию коллекции
4) Set.of() - возвращает immutable set
5) Set.copyOf(collection)- создает immutable копию коллекции
бричные методы:
6)Map.of(varargs)- если нечетное кол-во выкинет исключение или не скомпилируется если мало аргументов-создает immutable map
7)Map.copyOf(Map)-создает immutable копию
8(Map.ofEntries(Map.entry(key,value),Map.entry(key,value))- также создает immutable мапу

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Методы List

A

1) void add(int index, E element).
2) E get(index) -возвращает элемент по индексу
3) E set(int index, E element)- устанавливает элемент и возвращает прошлое значение
4) E remove(index) - удаляет элемент, и возвращает его значение
5) replaceAll(UnaryOperator) преобразует все элементы коллекции
6) С JAVA8 -sort(Comparator).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Методы по работе с Queue/Dequeue

A

Remove(pop)/element add
<============================<
poll/peek offer

Сверху кидают NPE если нет элементов и IllegalStateE если невозможно добавить
Снизу возвращают Null если нет элементов и false если невозможно добавить

У dequeue есть pop-полный аналог remove и push-позволяющий добавить элемент в голову

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Методы по работе с Map

A

Содержит методы аналогичные Cоllection
remove(Object key), isEmpty(), size(), clear()
А также:
1)put(K,V) добавляет запись если ключа нет, если ключ есть то заменяет значение и возвращает его.
2)V putIfAbsent(K,V) добавляет значение если нет ключа либо ключ есть, но значение null , иначе же не заменяет, и возвращает текущее значение V в карте.
3)V get(Object key) возвращает значение по ключу
4)V getOrDefault(Object key, V defaultValue) возвращает значение если есть ключ такой, иначе возвращает дефолтное значение
5)containsKey(Object o) и containsValue(Object o) возвращает boolean содержит ли коллекция данный ключ/значение (ищет по equals).
6)Collection values() возвращает коллекцию значений
7)Set keySet() возвращает сет ключей.
8) entryset() который возвращает immutable сет из сдвоенных записей (объектов типа Map.Entry.
9)V replace(K,V)заменяет значение по ключу данным значением. Возвращает старое значение.
10) replaceAll(BiFunction)-заменяет все значения
10) forEach(BiConsumer)
11)V merge(Key,NewValue,BiFunction(V,V,V)- в бифункции прописываем алгоритм что делать если есть такой ключ и значение не null (т.е. при необхдимости решения конфликта слияния-put например просто заменяет , а puIfAbsent не трогает). Если ключа такого нет или значение null то функция не выполняется и новое значение просто вставляется. Если функция выполняется но по каким то причинам возвращает null, то запись вообще удаляется.
12)V computeIfPresent(Key,BiFunction(K,V,V))б V б,compute, computeIfAbsent(Key,Function(K,V))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Поведение при Null у коллекций

A

сортируемые коллекции не позволяют добавлять Null(например Null если добавить в TreeSet или как ключ в TreeMap будет NPE при сортировке) Значения же в мапу всегда можно добавлять как null.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Compareable vs Comparator

A

1) Compareable реализуется в классе
2) compareTo(T) у Compareable vs compare(T t1, T t2) у компаратора
3) Compareable в java.lang -Comparator в java.util

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Методы Comparator

A

Статические методы инициализирующие сравнение:
1)Comparator Comparator.comparing(Comparator)
1)Comparator Comparator.comparingInt/Long/Double (Comparator)
3) naturalOrder(),reverseOrder() -возвращает натуральные компараторы
и дефолтные продолжающие цепочку сравнения:
1)Comparator thenComparing(Comparator)
2)Comparator thenComparingInt/Long/Double (Comparator)
3) reversed()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Collections методы исполбзующие comparator

A

Сollections.sort() - сортирует только объекты имплементирующие Compareable- иначе ошибка компиляции. Есть перегруженная версия с компаратором который может сортировать все. При сортировке коллекций лист сперва преобразуется в массив, затем в ходе проходки по листу в него вставляются значения из отсортированного массива (TImSort).
Collections.binarysearch(лист Compareable объектов,Object) ищет в списке представленный объект и возвращает его индекс либо предполагаемый индекс (отрицательный и на 1 меньше) его расположения в случае отсутствия.Список должен быть отсортирована, иначе результат непредсказуем. Если элементов таких несколько, то непредсказуемо какой из элементов будет найден. В ходе поиска используются сведения о натуральном порядке объектов. Есть перегруженнавя версия с компаратором

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

TreeSet

A

TreeSet сортирует объекты, реализующие Compareable по порядку определенному методом compareTo. Если добавить объект не реализующий CompareAble то скомпилируется, но выкинет ClassCastException в рантайме- можно избежать исключения добавив внешний компаратор в перегруженный конструктор (TreeSet(Comparator)). Не может иметь null значения (не поддаются сортировке)-выкидывает NullPointerException при итерации. За счет реализации интерфейса NavigableSet имеет методы:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что нельзя делать с генериками

A

1) создавать статическую переменную с генерик типом
2) создавать объект через new
3) применять в операцях instanceof
4) Создавать массив напримую через = new T[100] (можно через Array.newInstance() или с приведение = (T[])new Object[100]).Массив имеющий вид T[] по сути из за стирания во время выполнения является Object[] и даже при возвращения, и явном приведении к T[] перед возвращением всегда остается Object[].

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wildcards

A

Маска в коллекции не обозначает что в коллекцию можно будет добавить объект любого типа, она обозначает, что переменной можно будет присвоить объект коллекции с подходящим под маску генериком!!!.

Контравариантная маска позволяет вызывать методы использующие генерик (например add (T),replace(T)-( при этом может быть передан только тип точно соответствующий тому от чего super в маске), но нельзя возвращать генерик, можно возвращать только Object.
Ковариантная маска (upperbounded) наоборот не позволяет принимать как аргумент генерик, но зато возвращает тип от которого extends.
Обшая маска ? (unbounded) (Для компилятора выглядит как отсутствие генерика) также не позволяет принимать как аргумент генерик, и возвращает только Object.

Можно вкратце сказать что upperbounded и unbounded генерики Immutable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly