java collection Flashcards Preview

Java > java collection > Flashcards

Flashcards in java collection Deck (40)
Loading flashcards...
1

коллекция

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

2

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

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

3

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

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

4

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

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

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

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

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

5

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

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

6

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

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

7

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

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

8

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

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

9

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

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

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

10

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

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

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

11

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

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

12

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

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

13

HashSet и TreeSet?

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

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

14

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

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

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


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

15

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

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

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

16

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

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

17

ТгееМар

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

18

итератор

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

19

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

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

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

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

21

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

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

22

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

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

23

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

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

24

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

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

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

25

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

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


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

26

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

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

27

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

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

28

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

Интерфейс Comparable естественную сортировку,
Comparator по шаблонам.

29

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

1) Функционал предоставляемый интерфейсами Cloneable и Serializable просто не нужен для коллекций. (Тут стоит сделать исключение для ArrayList и LinkedList, которые их реализуют).

2) далеко не всегда нужен подкласс Cloneable потому что каждая операция клонирования потребляет очень много памяти, и неопытные программисты могут расходовать ее сами не понимая последствий.

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

30

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

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