java collection Flashcards

1
Q

коллекция

A

контейнер с элементами и с функциями манипулирования

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

преимущества использования коллекций.

A

безразмерность, функции сортировки, списки, деревья.

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

Какие данные могут хранить коллекции?

A

Коллекции могут хранить любые ссылочные типы данных.

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

Какова иерархия коллекций?

A

interface collection содержит интерфейсы list,set,queue.

Set содержит реализации в виде HashSet TreeSet LinkedHashSet

List содержит arrayList LinkedList Vector(Stack)

Map содержит TreeMap HashMap LinkedHashMap Hashtable

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

Что вы знаете о коллекциях типа List?

A

List — это упорядоченный список. Объекты хранятся в порядке их добавления в список. Доступ к элементам списка осуществляется по индексу.

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

Что вы знаете о коллекциях типа Set?

A

Set — множество неповторяющихся объектов. В коллекции этого типа разрешено наличие только одной ссылки типа null.

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

Что вы знаете о коллекциях типа Queue?

A

коллекция Очереди , предназначенная для хранения элементов в порядке, нужном для их обработки.

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

Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?

A

Массив ключ-значение - где в роли ключей может выступать обьект

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

Какие реализации SortedSet вы знаете и в чем их особенность?

A

уникальность ранимых объектов
в порядке возрастания (Comparator)

Реализации:
java.util.TreeSet — упорядоченное дерево. Инкапсулирует в себе TreeMap
.для операций add, remove и contains потребуется гарантированное время log(n).

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

Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?

A

LinkedList требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка, тогда как в ArrayList элементы просто идут по порядку

LinkedList стоит использоваь для скорости вставки и удаления данных в случае конца\начала списка. В остальных же случаях ArrayList по факту выигрывает в производительности изза кеша процесса и расположения элементов впамяти - в линкед листе они разбросаны хаотично

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

В каких случаях разумно использовать массив, а не ArrayList?

A

массивы могут быть быстрее и кушать меньше памяти.

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

Чем отличается ArrayList от Vector?

A

Vector deprecated. У Vector некоторые методы синхронизированы и поэтому они медленные. В любом случае Vector не рекомендуется использовать вообще.

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

HashSet и TreeSet?

A

HashSet хеш-таблица работает быстрее для большинства операций, таких как добавление, удаление.
производительность итерации по контейнеру зависит от емкости и «коэффициента загрузки» (рекомендуется оставлять load factor значением по умолчанию равным 0.75,

TreeSet — бинарное дерево.Скорость для базовых операций Log(n) упорядочивает список

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

Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?

A

HashMap хеш-таблица работает быстрее
производительность итерации по контейнеру зависит от емкости и «коэффициента загрузки» (рекомендуется оставлять load factor значением по умолчанию равным 0.75,

TreeMap — бинарное дерево.Скорость для базовых операций Log(n) упорядочивает список

если не нужна упорядоченность, использовать HashMap. Исключение — ситуация с вещественными числами, которые в качестве ключей почти всегда очень плохи. Для них нужно использовать TreeMap, предварительно поставив ему компаратор

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

Что такое Hashtable, чем она отличается от HashMap?

A

Некоторые методы HashTable синхронизированы, поэтому она медленнее HashMap.

HashTable не позволяет иметь null ключи или значения. HashMap позволяет иметь один null ключ и сколько угодно null значений.
У HashMap есть подкласс LinkedHashMap, который добавляет возможности по итерации. Если вам нужна эта функциональность, то можно легко переключаться между классами.
Общее замечание — не рекомендуется использовать HashTable даже в многопоточных приложениях. Для этого есть ConcurrentHashMap.

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

Что будет, если в Map положить два значения с одинаковым ключом?

A

Последнее значение перезапишет предыдущее.

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

ТгееМар

A

Он реализован как бинарное дерево поиска, значит его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента. Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator.

18
Q

итератор

A

Итератор — объект, позволяющий перебирать элементы коллекции. Например foreach реализован с использованием итератора. Одним из ключевых методов интерфейса Collection является метод Iterator iterator(). Он возвращает итератор — то есть объект, реализующий интерфейс Iterator.

19
Q

какие есть методы в Collections

A

Collections.sort(List myList) Сортирует список в естественном порядке.
Collections.sort(List, Comparator c) Сортировка с использованием компаратора.
Collections.shuffle(List myList) Перемешивает коллекцию в случайном порядке.
Collections.reverse(List myList) Переворачивает коллекцию в обратном порядке.
Collections.binarySearch(List mlist, T key) поиск в коллекции по ключу с использованием бинарного поиска.
Collections.copy(List dest, List src) Копирует коллекцию источник src в dest.
Collections.frequency(Collection c, Object o) Возвращает число вхождений объекта в коллекции.
Collections.synchronizedCollection(Collection c) Возвращает синхронизированную (потокобезопасную) коллекцию.

20
Q

Как получить не модифицируемую коллекцию?

A

Collections.unmodifiableList(list);
Collections.unmodifiableSet(set);
Collections.unmodifiableMap(map);

21
Q

Какие коллекции синхронизированы?

A

Для этого используется пакет Concurrent. А так @Deprecated HashTable, Vector.

22
Q

Как получить синхронизированную коллекцию из не синхронизированной?

A

Collections.synchronizedList(list);
Collections.synchronizedSet(set);
Collections.synchronizedMap(map);
Все они принимают коллекцию в качестве параметра, и возвращают потокобезопасную коллекцию с теми же элементами внутри.

23
Q

Почему Map не наследуется от Collection?

A

Они не совместимы, т.к. созданы для различных структур данных. Map использует пару ключ-значение.

24
Q

В чем разница между Iterator и Enumeration?

A

Enumeration в два раза быстрее Iterator и использует меньше памяти. Iterator потокобезопасен, т.к. не позволяет другим потокам модифицировать коллекцию при переборе. Enumeration можно использовать только для read-only коллекций. Так же у него отсутствует метод remove();

Enumeration: hasMoreElement(), nextElement()
Iterator: hasNext(), next(), remove()

25
Q

Как реализован цикл foreach?

A

Реализован на основе Iterator.

for(тип итер_пер : коллекция) блок_операторов

26
Q

Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?

A

Единственная задача итератора это перебор коллекции. Каждая коллекция имеет метод add() которым вы можете воспользоваться. Нет смысла добавлять этот метод в итератор, потому что коллекции могут быть упорядоченными и неупорядоченными, и метод add() при этом должен быть устроен по разному.

27
Q

Какие есть способы перебора всех элементов List?

A

Цикл с итератором
Цикл for
Расширенный цикл for
Цикл while

28
Q

В чем разница между интерфейсами Comparable и Comparator?

A

Интерфейс Comparable естественную сортировку,

Comparator по шаблонам.

29
Q

Почему коллекции не наследуют интерфейсы Cloneable и Serializable?

A

1) Функционал предоставляемый интерфейсами Cloneable и Serializable просто не нужен для коллекций. (Тут стоит сделать исключение для ArrayList и LinkedList, которые их реализуют).
2) далеко не всегда нужен подкласс Cloneable потому что каждая операция клонирования потребляет очень много памяти, и неопытные программисты могут расходовать ее сами не понимая последствий.
3) клонирование и сериализация являются очень узкоспецифичными операциями, и реализовывать их нужно только когда это необходимо. Многие классы коллекции реализуют данные интерфейсы, но совершенно незачем закладывать их для всех коллекций вообще. Если вам нужно клонирование и сериализация — просто воспользуйтесь теми классами где она есть, если нет — остальными классами.

30
Q

Как работает HashMap?

A

По принципам Хеширования-преобразования любой переменной/объекта в уникальный код.
Карта(map) по определению, это – «Объект хранящий попарно значения(values) и ключи(keys)
HashMap имеет внутренний класс Entry, полями ключ значение, когда срабатывает метод Put - , проверяется существует ли ключ. рассчитывается хеш-значение, вычисления точной позиции, куда будет помещен объект Entry. два не равных объекта могут иметь равные значения хеш-кодов поэтому при одинаковых хешкодах обьекты лежат в LinkedList корзинах

31
Q

Quene

A

очередь как в аптеке

32
Q

что такое стек

A

как магазин пистолета

33
Q

что такое куча

A

просто массив но представляется в виде бинарного дерева
родитель i/2
левый дочерний 2i
првый дочерний 2
i+1

34
Q

хэшкод

A

число

35
Q

хешфункция

A

превращает обьект в число

36
Q

ArrayList

A

быстрый доступ, медленная вставка и удаление, любое значение, в том числе null, не синхронизирован

37
Q

Отличия Quene от Dequene

A

Quene это очередь как в аптеке,Dequene Расширяет Quene позволяя удалять и вставлять с двух концов

38
Q

Потокобезопасность

A

синхронизированность, которая сказывается на скорости

39
Q

Какие знаете сортировки

A

ПУзырьковая (проходы по i-j)
Быстрая(берем опорный элемент(среднее значение) делим пополам массив и и в левую часть кладем меньшее и в правую от опорного элемента большее ,рекурсией сортируем левые и правые части аналогично)

40
Q

Какие алгоритмы поиска знаете

A

линейный поиск перебором(проход итерацией)

Бинарный поиск в сортированном(делит пополам