Куча разных вопросов Flashcards

1
Q

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

A

Массивы могу быть эффективнее и требовать меньше памяти. Но почти всегда надо использовать ArrayList

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

В чем отличия и сходства List и Set

A

Различия:
В Set элементы не могут повторяться и нельзя обратиться к элементу по индексу.

Общее:
Оба унаследованы от Collection, то есть имеют одинаковый набор и сигнатуры методов.

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

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

A

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

Enumeration:hasMoreElement(),nextElement()

Iterator:hasNext(),next(),remove()

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

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

A

Есть три различия:

  1. Iteratorможет использоваться для перебора элементовSet,ListиMap. В отличие от него,ListIteratorможет быть использован только для перебора элементов коллекцииList
  2. Iteratorпозволяет перебирать элементы только в одном направлении, при помощи методаnext(). Тогда какListIteratorпозволяет перебирать список в обоих направлениях, при помощи методовnext()иprevious()
  3. При помощиListIteratorвы можете модифицировать список, добавляя/удаляя элементы с помощью методовadd()иremove(). Iterator не поддерживает данную функциональность.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Дайте определение понятию “итератор”

A

Итератор — объект, позволяющий перебирать элементы коллекции

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

Дайте определение понятию “коллекция”

A

Это класс который хранит набор элементов

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

Как задается порядок следования объектов в коллекции, как отсортировать коллекцию MAP

A

Используй TreeMap
Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравненияComparator.
Для этого надо использовать конструктор:
TreeМар(Comparator с).
Надо переопределить 2 метода:

  • int compare(Object obj1, object obj2)— возвращает отрицательное число, еслиobj1в каком-то смысле меньшеobj2; нуль, если они считаются равными; положительное число, еслиobj1большеobj2
  • boolean equals(Object obj)— сравнивает данный объект с объектомobj, возвращаяtrue, если объекты совпадают в каком-либо смысле, заданном этим методом
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как использовать Map с вещественными числами

A

Вещественные числа в качестве ключей почти всегда очень плохи. Для них нужно использоватьTreeMap, предварительно поставив ему компаратор, который сравнивает вещественные числа так, как это нужно в данной задаче. Например, для обычных геометрических задач два вещественных числа могут считаться равными, если отличаются не более, чем на 1e-9.

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

Как получить коллекцию только для чтения

A
  • Collections.unmodifiableList(list);
  • Collections.unmodifiableSet(set);
  • Collections.unmodifiableMap(map);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

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

A
public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s) {

return new UnmodifiableSortedSet<>(s);

}

Unmodifiable
и так же с остальными классами
не понимаю что это вообще

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

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

A
  • Collections.synchronizedList(list);
  • Collections.synchronizedSet(set);
  • Collections.synchronizedMap(map)

Все они принимают коллекцию в качестве параметра, и возвращают потокобезопасную коллекцию с теми же элементами внутри.

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

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

A

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

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

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

A

Любые ссылочные типы данных.

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

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

A

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

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

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

A

TreeSet
хранит свои элементы в виде упорядоченного по значениям дерева.
инкапсулирует в себе TreeMap, который в свою очередь использует сбалансированное бинарное красно-черное дерево для хранения элементов.

для операций add, remove и contains потребуется гарантированное время log(n)

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

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

A

Не нужно указывать конкретный размер массивов.
(Используются рекурсивные типы данных)
Различные стандартные функции которые облегчают работу с данными.

17
Q

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

A

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

18
Q

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

A

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

19
Q

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

A

Vector устарел. Не рекоммендуется использовать вообще. Он потокобезопасный и от этого медленнее.

20
Q

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

A

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

21
Q

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

A

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

22
Q

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

A

Map хранит связку ключ - значение.
В отличие от предыдущих классов не наследуется от Collection.
У одного ключа - одно значение.
Однако много ключей могут быть от одного значения.

23
Q

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

A

Хранит элементы в порядке нужном для их обработки.
Обычно работает в порядке FIFO (first in first out)

24
Q

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

A

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

25
Q

Что вы знаете о реализации классов HashSet и TreeSet

A

Есть такая штука - хэш функция. Она превращает объект класса в уникальное число. Чтобы ей воспользоваться надо перезаписать метод HashCode(), унаследованный от класса Object. HashSet будет использовать этот метод для эффективного размещения объектов коллекции.

HashSet использует для реализации HashMap. Ключ - это вставляемый элемент, значение - пустой объект(new Object()). Порядок элементов не сохраняется из-за особенностей реализации.
TreeSet использует TreeMap. Располагает элементы в порядке возрастания.

HashSet
- предоставляет константное время дляadd(),remove(),contains()иsize()
- порядок элементов в контейнере может меняться
- производительность итерации по контейнеру зависит от емкости и «коэффициента загрузки».

TreeSet
- время для базовых операцийadd(),remove(),contains()— log(n)
- гарантирует порядок элементов
- не предоставляет каких-либо параметров для настройки производительности
- предоставляет дополнительные методы для упорядоченного списка:first(),last(),headSet(),tailSet()и т.д.

26
Q

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

A

Общее:
Оба наследуют от LIST и упорядоченно хранят элементы.

Различия:
ArrayList внутри - обычный массив. Таким образом вставка в середину происходит медленно так как все элементы сдвигаются на 1, но get и set работают быстро.
LinkedList - отдельные элементы со ссылками друг на друга, таким образом вставка элементов в середину работает быстро, однако get и set работают медленно так как приходиться итерировать до нужного индекса чтобы найти элемент. Так же LinkedList требует больше памяти для такого же количества элементов (потому что ещё ссылки хранит а в ArrayList всё кайф).

27
Q

Что такое стек и очередь, расскажите в чем их отличия

A

Обычно, но не обязательно очереди работают по принципу FIFO — первым пришел, первым ушел.
Стэк — почти как очередь, но работает по принципу LIFO — последним пришел, первым ушел.

Независимо от порядка добавления/удаления, голова очереди это элемент, который будет удален при вызове методовremove()илиpoll()

28
Q

Что такое Hashtable, чем она отличается от HashMap На сегодняшний день она deprecated, как все-таки использовать нужную функциональность

A

HashTable - потокобезопасна, от этого медленнее.
Не разрешает использование null.

не рекомендуется использоватьHashTableдаже в многопоточных приложениях. Для этого естьConcurrentHashMap.

29
Q

Collections некоторые методы

A

sort
shuffle
binarySearch
copy - копирует другую коллекцию
frequency - Возвращает число вхождений объекта в коллекции

Collections.synchronizedCollection(Collection c)
Возвращает синхронизированную (потокобезопасную) коллекцию.