какие высказывания относительно java util vector и java util hashtable можно считать корректными
Ответы на экзаменационные вопросы интернет-курсов ИНТУИТ
Ответы на экзаменационные вопросы интернет-курсов ИНТУИТ (INTUIT): 091. Введение в JavaScript
1. Автоматический сборщик мусора (garbage collector) в Java – это механизм, который:
2. Будет ли переменная sb после выполнения кода в строке 2 указывать на тот же самый объект?
3. В JDK 1.2 введены новые классы и интерфейсы, которые позволяют работать с наборами объектов. Отметьте те из них, которые являются интерфейсами.
4. В чем особенность класса-обертки для void?
5. В чем разница между классами List и Choice?
6. Выберите все правильные ответы.
7. Для каких значений числовой переменной x будет верно следующее выражение?
8. Для каких примитивных типов Java существуют классы-обертки?
9. Для каких элементов класса работает полиморфизм?
10. Для чего служит в Java класс Thread?
11. Если в классе заводится новый элемент и пока нет никаких факторов, позволяющих выбрать тот или иной модификатор доступа, какой модификатор следует использовать?
12. Если в классе переопределяется метод toString(), какой еще метод необходимо переопределить для корректного использования объектов этого класса в хэш-таблицах?
13. Если вызвать write(0x) у экземпляра OutputStream, то в каком порядке и какие байты будут записаны в выходной поток?
14. Если имеется переменная типа абстрактный класс, можно ли с ее помощью обращаться к абстрактным методам этого класса
15. Если метод использует переменную класса, должна ли она быть объявлена выше объявления метода?
16. Если один поток начал исполнение synchronized-блока, указав ссылку на некий объект, может ли другой поток обратиться к полю этого объекта? К методу?
17. Зачем нужен полиморфизм?
18. Значение какого типа будет хранить переменная после инициализации?
19. Инкапсуляция – это:
20. Как записать в Java-программе символ с кодом 546?
21. Как записывается заголовок метода main?
22. Как инициализировать массив, эквивалентный объявляемому ниже, но без заведения переменной?
23. Как определить, можно ли преобразовать один тип массива к другому?
24. Как получить объект класса Color из AWT, описывающий чистый синий цвет?
25. Какая из приведенных ниже UML-диаграмм является верной:
26. Какая кодировка используется классом OutputStreamWriter по умолчанию?
27. Какая строка будет выдана на консоль после выполнения фрагмента кода, приведенного ниже?
28. Какие версии Java называются Java 2?
29. Какие высказывания относительно java. util. Vector и java. util. Hashtable можно считать корректными?
30. Какие заголовки методов являются корректными с точки зрения компилятора?
31. Какие значения не могут участвовать в преобразовании к строке?
32. Какие из методов выбрасывают InterruptedException?
33. Какие из перечисленных идентификаторов являются корректными?
34. Какие из перечисленных ниже имен являются составными?
35. Какие из перечисленных ниже терминов относятся к подуровням второго уровня?
36. Какие из перечисленных ниже характеристик относятся к протоколу TCP?
37. Какие из перечисленных свойств являются общими для программ, написанных на C++ и Java?
38. Какие из следующих адресов относятся к подсети класса B?
39. Какие источники могут использоваться классами стандартных входных потоков java в качестве источника данных?
40. Какие классы и интерфейсы, необходимые для поддержки многопоточности, определены в пакете java. lang?
41. Какие классы предоставляют методы для записи в поток двоичного представления значений примитивных типов Java?
42. Какие методы объявлены в интерфейсе Serializable?
43. Какие модификаторы позволяют обращаться к элементу из классов того же пакета?
44. Какие модификаторы присутствуют в определении класса Math?
45. Какие преимущества дает многопоточная архитектура?
46. Какие утверждения верны?
47. Какие утверждения относительно использования метода newInstance() объектов типа Class для создания экземпляров соответствующего класса верны?
48. Какие утверждения относительно клонирования верны?
49. Какие формальные нарушения соглашений по именованию присутствуют в следующем примере:
50. Каким будет результат работы следующего кода?
51. Каким будет результат следующей строки (код символа восклицательного знака 33)?
52. Каким будет результат следующих действий?
53. Каким будет результат следующих действий?
54. Каким классом лучше воспользоваться для загрузки web-страницы с сервера?
55. Каким классом лучше воспользоваться для рассылки сигналов точного времени?
56. Каким образом на однопроцессорной машине исполняются многопоточные приложения?
57. Какими из перечисленных свойств обладает платформа Java?
58. Какими параметрами в Java характеризуется шрифт?
59. Каков будет результат выполнения программы:
60. Каков будет результат работы следующего кода:
61. Каков будет результат следующего примера?
62. Каков будет результат следующего примера?
63. Каков будет результат следующих действий?
64. Какое значение будет выведено на консоль в представленном фрагменте кода?
65. Какое значение появится на консоли после выполнения следующего кода?
66. Какое значение появится на консоли после выполнения следующей программы?
67. Какое из выражений относительно класса java. *****ntime является корректным?
68. Какое из перечисленных ниже имен является идентификатором?
69. Какое из перечисленных ниже имен является простым?
70. Какой из перечисленных ниже классов имеет наибольшее сходство с классом Vector?
71. Какой класс используется для представления модифицируемых строк?
72. Какой метод нужно вызвать, чтобы инициировать перерисовку компонента?
73. Какой метод нужно переопределить, чтобы реализовать отрисовку внешнего вида компонента?
74. Классы каких базовых исключений определены в пакете java. lang?
75. Корректен ли объявленный ниже класс? Если нет, то как его можно исправить?
76. Корректен ли следующий код?
77. Корректен ли следующий пример кода, и если да, то сколько преобразований будет произведено при его исполнении?
78. Корректен ли следующий пример? Если нет, то в каких строках какие ошибки будут сгенерированы?
79. Корректно ли следующее обращение к переменной x?
80. Корректны ли следующие преобразования?
82. Множественным наследованием называют:
83. Могут ли пакет и вложенные пакеты содержать одноименные классы?
84. Может ли быть дважды вызван метод init у апплета? Метод start?
85. Может ли возникнуть ошибка ArrayStoreException при работе следующих методов?
86. Может ли измениться содержимое переменной типа String, если передать ее в качестве аргумента при вызове метода?
87. Может ли массив основываться на абстрактных классах? Интерфейсах?
88. Можно ли клонировать объекты следующего класса?
89. Можно ли при наследовании не реализовывать абстрактный метод родительского класса?
90. Можно ли при переопределении некоторого абстрактного метода perform() использовать выражение super. perform()?
91. Можно ли с помощью класса URL пересылать данные на сервер?
92. Назовите сете-зависимые уровни модели OSI.
93. Назовите сете-независимые уровни модели OSI.
94. Необходимо написать метод, который возвращает случайное число в диапазоне от 0 до 100, кратное 5. Из перечисленных вариантов выберите правильный.
95. Необходимо написать метод, который получает в качестве параметра значение угла в градусах типа double и вычисляет его косинус. Какой из приведенных вариантов верен?
97. От какого класса наследуется класс Applet?
98. От какого класса наследуются InputStream и OutputStream?
99. От какого класса наследуются классы массивов?
100. Отметьте варианты ответа, в которых пары чисел равны друг-другу:
101. Отметьте ключевые слова языка Java:
102. Поскольку интерфейс Runnable представляет собой альтернативный способ программирования потоков исполнения, можно ли в такой программе обойтись без класса Thread?
103. Почему объектно-ориентированное программирование пришло на смену процедурному программированию?
104. Предположим, вы моделируете автомобиль, описывая его свойства в формате Java-класса. Какие из следующих полей нужно объявить динамическими?
105. Предположим, нам необходимо создать собственную иерархию исключений. Рассмотрим следующий пример.
106. Предположим, нам необходимо создать собственную иерархию исключений. Рассмотрим следующий пример.
107. Приведенная ниже программа должна вывести на консоль Hello World! Выберите строки, которые нужно модифицировать в вашей программе, чтобы получить правильный результат.
108. Программист располагает свою программу в каталоге c:\work. Программа состоит из одного класса demo. Start. Как следует расположить файл. class и как запускать виртуальную машину java?
109. Программист располагает свою программу в каталоге c:\work. Программа состоит из одного класса demo. Start. Как нужно расположить файл. java и как запускать компилятор javac?
110. Пусть класс User описывает пользователя системы. В качестве имени используется его e-mail адрес, который всем известен, а пароль, конечно, не должен быть доступен никому, кроме самого пользователя. Корректна ли следующая реализация?
111. Пусть классы Wolf и Rabbit являются наследниками класса Animal. Корректен ли следующий пример?
112. Рассмотрим пример. Эти исключения имеют следующую иерархию наследования:
113. Сколько вложенных компонентов может быть у контейнера ScrollPane?
114. Сколько комментариев в следующем примере кода:
115. Хотя примитивные массивы не могут участвовать в преобразованиях, однако массивы int[][] и byte[][] могут рассматриваться как одномерные объектные массивы, основанные на ссылочном типе «одномерный примитивный массив». Могут ли такие типы быть преобразованы из одного в другой?
116. Чему будет равно следующее выражение после вычислений?
117. Что будет выведено в результате выполнения следующего примера?
118. Что из перечисленного является в классе «Лифт» внешним интерфейсом:
119. Что из перечисленного является классами?
120. Что используется для описания поведения объекта?
121. Что означает выражение deprecated?
122. Что произойдет при попытке к одному объекту PipedWriter несколько раз присоединять объекты PipedReader?
123. Что произойдет, если, используя ObjectOutputStream, записать в файл значения типов long, int, byte именно в таком порядке, а считать в обратном, используя DataInputStream?
124. Что такое приоритет потока?
125. Эквивалентны ли две приведенные ниже операции над ссылочными переменными x1 и x2 (SomeClass2 – тип переменной x2)?
126. Является язык Java компилируемым или интерпретируемым?
Актуальная информация по учебным программам ИНТУИТ расположена по адресу: http://www. *****/.
(программ: 450)
(программ: 14)
Developer Project предлагает поддержку при сдаче экзаменов учебных курсов Интернет-университета информационных технологий INTUIT (ИНТУИТ). Мы ответили на экзаменационные вопросы 380 курсов INTUIT (ИНТУИТ), всего вопросов, ответов (некоторые вопросы курсов INTUIT имеют несколько правильных ответов). Текущий каталог ответов на экзаменационные вопросы курсов ИНТУИТ опубликован на сайте объединения Developer Project по адресу: http://www. dp5.su/
Подтверждения правильности ответов можно найти в разделе «ГАЛЕРЕЯ», верхнее меню, там опубликованы результаты сдачи экзаменов по 100 курсам (удостоверения, сертификаты и приложения с оценками).
Болеевопросов по 70 курсам и ответы на них, опубликованы на сайте http://www. dp5.su/, и доступны зарегистрированным пользователям. По остальным экзаменационным вопросам курсов ИНТУИТ мы оказываем платные услуги (см. вкладку верхнего меню «ЗАКАЗАТЬ УСЛУГУ». Условия поддержки и помощи при сдаче экзаменов по учебным программам ИНТУИТ опубликованы по адресу: http://www. dp5.su/
— часть вопросов могла не войти в настоящий перечень, т. к. они представлены в графической форме. В перечне возможны неточности формулировок вопросов, что связано с дефектами распознавания графики, а так же коррекцией со стороны разработчиков курсов.
Пакет java.util
Интерфейс Observer и класс Observable
Рассмотрим пример организации взаимодействия классов:
В результате работы на консоль будет выведено:
Коллекции
Зачастую в программе работа идет не с одним объектом, а с целой группой более или менее однотипных экземпляров (например, автопарк организации). Проще всего сделать это с помощью массивов. Однако, несмотря на то, что это достаточно эффективное решение для многих случаев, оно имеет некоторые ограничения. Так, обращаться к элементу массива можно только по его номеру (индексу). Также необходимо заранее задать длину массива и больше ее не менять.
Интерфейсы
Интерфейс Collection
Интерфейс Set
Интерфейс List
Интерфейс Map
Классы, которые реализуют этот интерфейс, хранят неупорядоченный набор объектов парами ключ/значение. Каждый ключ должен быть уникальным. Hashtable после модификации в JDK 1.2 реализует интерфейс Map. Порядок следования пар ключ/значение не определен.
Интерфейс SortedSet
Интерфейс SortedMap
Интерфейс Iterator
Таким образом, подводя итог, перечислим интерфейсы, используемые при работе с коллекциями:
Aбстрактные классы, используемые при работе с коллекциями
Конкретные классы коллекций
Классы LinkedList и ArrayList имеют схожую функциональность. Однако с точки зрения производительности они отличаются. Так, в ArrayList заметно быстрей (примерно на порядок) осуществляются операции прохода по всему списку (итерации) и получения данных. LinkedList почти на порядок быстрее выполняет операции удаления и добавления новых элементов.
Предположим, имеется массив строк, содержащий названия городов. Для того, чтобы найти элемент массива, содержащий название города, в общем случае требуется просмотреть весь массив, а если необходимо найти все элементы массива, то для поиска каждого, в среднем, потребуется просматривать половину массива. Такой подход может оказаться приемлемым только для небольших массивов.
Далее, если необходимо добавить новую пару ключ/значение, вычисляется новый индекс, и если этот индекс совпадает с уже имеющимся, то создается список ключей, на который указывает элемент массива ключей. Таким образом, при обратном извлечении ключа необходимо вычислить индекс массива по тому же алгоритму и получить его. Если ключ в массиве единственный, то используется значение элемента массива, если хранится несколько ключей, то необходимо обойти список и выбрать нужный.
Есть несколько соображений, относящихся к производительности классов, использующих для хранения данных алгоритм хэширования. В частности, размер массива. Если массив окажется слишком мал, то связанные списки будут слишком длинными и скорость поиска станет существенно снижаться, так как просмотр элементов списка будет такой же, как в обычном массиве. Чтобы этого избежать, задается некий коэффициент заполнения. При заполнении элементов массива, в котором хранятся ключи (или списки ключей) на эту величину, происходит увеличение массива и производится повторное реиндексирование. Таким образом, если массив окажется слишком мал, то он будет быстро заполняться и будет производиться операция повторного индексирования, которая отнимает достаточно много ресурсов. С другой стороны, если массив сделать большим, то при необходимости просмотреть последовательно все элементы коллекции, использующей алгоритм хэширования, придется обрабатывать большое количество пустых элементов массива ключей.
Начальный размер массива и коэффициент загрузки коллекции задаются при конструировании. Например:
Существует также конструктор без параметров, который использует значения по умолчанию 101 для размера массива (в последней версии значение уменьшено до 11) и 0.75 для коэффициента загрузки.
Использование алгоритма хэширования позволяет гарантировать, что скорость доступа к элементам коллекции такого типа будет увеличиваться не линейно, а логарифмически. Таким образом, при частом поиске каких-либо значений по ключу имеет смысл задействовать коллекции, применяющие алгоритм хэширования.
Итерация по всем элементам коллекции пропорциональна ее емкости. Поэтому имеет смысл не делать размер коллекций чрезмерно большим, если достаточно часто придется осуществлять итерацию по элементам.
Методы HashMap не являются синхронизированными. Для того, чтобы обеспечить нормальную работу в многопоточном варианте, следует использовать либо внешнюю синхронизацию потоков, либо синхронизированный вариант коллекции.
Класс Collections
Класс Collections является классом-утилитой и содержит несколько вспомогательных методов для работы с классами, обеспечивающими различные интерфейсы коллекций. Например, для сортировки элементов списков, для поиска элементов в упорядоченных коллекциях и т.д. Но, пожалуй, наиболее важным свойством этого класса является возможность получения синхронизированных вариантов классов-коллекций. Например, для получения синхронизированного варианта Map можно использовать следующий подход:
Справочник по Java Collections Framework
Данная публикация не является полным разбором или анализом (не покрывает пакет java.util.concurrent ). Это, скорее, справочник, который поможет начинающим разработчикам понять ключевые отличия одних коллекций от других, а более опытным разработчикам просто освежить материал в памяти.
Что такое Java Collections Framework?
Java Collection Framework — иерархия интерфейсов и их реализаций, которая является частью JDK и позволяет разработчику пользоваться большим количесвом структур данных из «коробки».
Базовые понятия
Интерфейс Map [doc]
Hashtable — реализация такой структуры данных, как хэш-таблица. Она не позволяет использовать null в качестве значения или ключа. Эта коллекция была реализована раньше, чем Java Collection Framework, но в последствии была включена в его состав. Как и другие коллекции из Java 1.0, Hashtable является синхронизированной (почти все методы помечены как synchronized ). Из-за этой особенности у неё имеются существенные проблемы с производительностью и, начиная с Java 1.2, в большинстве случаев рекомендуется использовать другие реализации интерфейса Map ввиду отсутствия у них синхронизации.
WeakHashMap — реализация хэш-таблицы, которая организована с использованием weak references. Другими словами, Garbage Collector автоматически удалит элемент из коллекции при следующей сборке мусора, если на ключ этого элеметна нет жёстких ссылок.
Интерфейс List [doc]
Реализации этого интерфейса представляют собой упорядоченные коллекции. Кроме того, разработчику предоставляется возможность доступа к элементам коллекции по индексу и по значению (так как реализации позволяют хранить дубликаты, результатом поиска по значению будет первое найденное вхождение).
ArrayList — как и Vector является реализацией динамического массива объектов. Позволяет хранить любые данные, включая null в качестве элемента. Как можно догадаться из названия, его реализация основана на обычном массиве. Данную реализацию следует применять, если в процессе работы с коллекцией предплагается частое обращение к элементам по индексу. Из-за особенностей реализации поиндексное обращение к элементам выполняется за константное время O(1). Но данную коллекцию рекомендуется избегать, если требуется частое удаление/добавление элементов в середину коллекции. Подробный анализ и описание можно почитать в этом хабратопике.
Интерфейс Set [doc]
Представляет собой неупорядоченную коллекцию, которая не может содержать дублирующиеся данные. Является программной моделью математического понятия «множество».
Интерфейс Queue [doc]
Этот интерфейс описывает коллекции с предопределённым способом вставки и извлечения элементов, а именно — очереди FIFO (first-in-first-out). Помимо методов, определённых в интерфейсе Collection, определяет дополнительные методы для извлечения и добавления элементов в очередь. Большинство реализаций данного интерфейса находится в пакете java.util.concurrent и подробно рассматриваются в данном обзоре.
Заключение
Java Collections Framework содержит большое количество различных структур данных, доступных в JDK «из коробки», которые в большинстве случаев покрывают все потребности при реализации логики приложения. Сравнение временных характеристик основных коллекций, которые зачастую используются в разработке приложений приведено в таблице:
При необходимости, разработчик может создать собственную реализацию, расширив или переопределив существующую логику, либо создав свою собственную реализацию подходящего интерфейса с нуля. Также существует некоторое количество готовых решений, которые являются альтернативой или дополнением к Java Collections Framework. Наиболее популярными являются Google Guava и Commons Collections.
Собеседование по Java — коллекции (Collections) (вопросы и ответы)
Список вопросов и ответов по теме “Коллекции в Java”.
К списку вопросов по всем темам
Вопросы
1. Дайте определение понятию “коллекция”.
2. Назовите преимущества использования коллекций.
3. Какие данные могут хранить коллекции?
4. Какова иерархия коллекций?
5. Что вы знаете о коллекциях типа List?
6. Что вы знаете о коллекциях типа Set?
7. Что вы знаете о коллекциях типа Queue?
8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
9. Назовите основные реализации List, Set, Map.
10. Какие реализации SortedSet вы знаете и в чем их особенность?
11. В чем отличия/сходства List и Set?
12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
13. В каких случаях разумно использовать массив, а не ArrayList?
14. Чем отличается ArrayList от Vector?
15. Что вы знаете о реализации классов HashSet и TreeSet?
16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
18. Что будет, если в Map положить два значения с одинаковым ключом?
19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
20. Дайте определение понятию “итератор”.
21. Какую функциональность представляет класс Collections?
22. Как получить не модифицируемую коллекцию?
23. Какие коллекции синхронизированы?
24. Как получить синхронизированную коллекцию из не синхронизированной?
25. Как получить коллекцию только для чтения?
26. Почему Map не наследуется от Collection?
27. В чем разница между Iterator и Enumeration?
28. Как реализован цикл foreach?
29. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
30. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
31. В чем разница между Iterator и ListIterator?
32. Какие есть способы перебора всех элементов List?
33. В чем разница между fail-safe и fail-fast свойствами?
34. Что делать, чтобы не возникло исключение ConcurrentModificationException?
35. Что такое стек и очередь, расскажите в чем их отличия?
36. В чем разница между интерфейсами Comparable и Comparator?
37. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
Ответы
Тема коллекций невероятно обширная и для того, чтобы ответить на каждый вопрос глубоко нужна отдельная статья почти под каждый вопрос. При проработке этого раздела рекомендую прочитать дополнительный материал, указанный в ответах.
1. Дайте определение понятию “коллекция”.
Коллекциями/контейнерами в Java принято называть классы, основная цель которых – хранить набор других элементов.
2. Назовите преимущества использования коллекций.
Массивы обладают значительными недостатками. Одним из них является конечный размер массива, как следствие, необходимость следить за размером массива. Другим — индексная адресация, что не всегда удобно, т.к. ограничивает возможности добавления и удаления объектов. Чтобы избавиться от этих недостатков уже несколько десятилетий программисты используют рекурсивные типы данных, такие как списки и деревья. Стандартный набор коллекций Java служит для избавления программиста от необходимости самостоятельно реализовывать эти типы данных и снабжает его дополнительными возможностями.
3. Какие данные могут хранить коллекции?
Коллекции могут хранить любые ссылочные типы данных.
4. Какова иерархия коллекций?
Здесь следует обратить внимание, что interface Map не входит в иерархию interface Collection.
С Java 1.6 классы TreeSet и TreeMap имплементируют интерфейсы NavigableSet и NavigableMap, которые расширяют интерфейсы SortedSet и SortedMap соответственно (SortedSet и SortedMap расширяют Set и Map).
Подробная статья про коллекции с описанием основных методов: http://www.quizful.net/post/Java-Collections
5. Что вы знаете о коллекциях типа List?
List — это упорядоченный список. Объекты хранятся в порядке их добавления в список. Доступ к элементам списка осуществляется по индексу.
6. Что вы знаете о коллекциях типа Set?
7. Что вы знаете о коллекциях типа Queue?
Queue — коллекция, предназначенная для хранения элементов в порядке, нужном для их обработки. В дополнение к базовым операциям интерфейса Collection, очередь предоставляет дополнительные операции вставки, получения и контроля.
Очереди обычно, но не обязательно, упорядочивают элементы в FIFO (first-in-first-out, «первым вошел — первым вышел») порядке.
Методы element() и peek() возвращают (но не удаляют) верхушку очереди.
java.util.Queue реализует FIFO–буфер. Позволяет добавлять и получать объекты. При этом объекты могут быть получены в том порядке, в котором они были добавлены.
Подробнее http://www.seostella.com/ru/article/2012/08/09/kollekcii-collections-v-java-queue.html
8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
Интерфейс java.util.Map используется для отображения каждого элемента из одного множества объектов (ключей) на другое (значений). При этом, каждому элементу из множества ключей ставится в соответствие множество значений. В то же время одному элементу из множества значений может соответствовать 1, 2 и более элементов из множества ключей. Интерфейс java.util.Map описывает функциональность ассоциативных массивов.
http://developer.alexanderklimov.ru/android/java/map.php
9. Назовите основные реализации List, Set, Map.
Интерфейс | Класс/Реализация | Описание |
---|---|---|
List | ArrayList | Список |
LinkedList | Список | |
Vector | Вектор | |
Stack | Стек | |
Set | HashSet | Множество |
TreeSet | Множество | |
SortedSet (расширяющий интерфейс) | Отсортированное множество | |
Map | HashMap | Карта/Словарь |
TreeMap | Карта/Словарь | |
SortedMap (расширяющий интерфейс) | Отсортированный словарь | |
Hashtable | Хеш-таблица |
10. Какие реализации SortedSet вы знаете и в чем их особенность?
Реализации: java.util.TreeSet — коллекция, которая хранит свои элементы в виде упорядоченного по значениям дерева. TreeSet инкапсулирует в себе TreeMap, который в свою очередь использует сбалансированное бинарное красно-черное дерево для хранения элементов. TreeSet хорош тем, что для операций add, remove и contains потребуется гарантированное время log(n).
11. В чем отличия/сходства List и Set?
12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
Описание | Операция | ArrayList | LinkedList |
---|---|---|---|
Взятие элемента | get | Быстро | Медленно |
Присваивание элемента | set | Быстро | Медленно |
Добавление элемента | add | Быстро | Быстро |
Вставка элемента | add(i, value) | Медленно | Быстро |
Удаление элемента | remove | Медленно | Быстро |
Если необходимо вставлять (или удалять) в середину коллекции много элементов, то лучше использовать LinkedList. Во всех остальных случаях – ArrayList.
LinkedList требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка, тогда как в ArrayList элементы просто идут по порядку
Из лекции javarush.ru
Структуры данных в картинках. LinkedList: http://habrahabr.ru/post/127864/
13. В каких случаях разумно использовать массив, а не ArrayList?
Если коротко, то Oracle пишет — используйте ArrayList вместо массивов. Если ответить на этот вопрос нужно по-другому, то можно сказать следующее: массивы могут быть быстрее и кушать меньше памяти. Списки теряют в производительности из-за возможности автоматического увеличения размера и сопутствующих проверок. Плюс к этому, что размер списка увеличивается не на 1, а на большее кол-во элементов (+15)*. Так же доступ к [10] в массиве может быть быстрее чем вызов get(10) у списка.
*Читатель прислал комментарий «У ArrayList увеличение происходит в 1.5 раза. int newCapacity = oldCapacity + (oldCapacity >> 1);».
Структуры данных в картинках. ArrayList: http://habrahabr.ru/post/128269/
Еще о ArrayList на сайте http://developer.alexanderklimov.ru/android/java/arraylist.php
14. Чем отличается ArrayList от Vector?
Vector deprecated. У Vector некоторые методы синхронизированы и поэтому они медленные. В любом случае Vector не рекомендуется использовать вообще.
15. Что вы знаете о реализации классов HashSet и TreeSet?
HashSet реализован на основе хеш-таблицы, а TreeSet — на основе бинарного дерева.
Подробнее о Set, HashSet, LinkedHashSet, TreeSet: http://developer.alexanderklimov.ru/android/java/set.php
Годный ответ на StackOverflow http://stackoverflow.com/questions/1463284/hashset-vs-treeset
16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
В целом ответ про HashSet и TreeSet подходит и к этому вопросу.
TreeMap реализован на красно-черном дереве, время добавления/поиска/удаления элемента — O(log N), где N — число элементов в TreeMap на данный момент.
У HashMap время доступа к отдельному элементу — O(1) при условии, что хэш-функция ( Object.hashCode() ) определена нормально (что является правдой в случае Integer ).
Структуры данных в картинках. HashMap: http://habrahabr.ru/post/128017/
17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
http://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable
18. Что будет, если в Map положить два значения с одинаковым ключом?
Последнее значение перезапишет предыдущее.
19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
В этом классе четыре конструктора:
ТгееМар() — создает пустой объект с естественным порядком элементов;
TreeМар(Comparator с) — создает пустой объект, в котором порядок задается объектом сравнения с;
ТгееМар(Map f) — создает объект, содержащий все элементы отображения f, с естественным порядком его элементов;
ТгееМар(SortedMap sf) — создает объект, содержащий все элементы отображения sf, в том же порядке.
Интерфейс Comparator описывает два метода сравнения:
Для каждой коллекции можно реализовать эти два метода, задав конкретный способ сравнения элементов, и определить объект класса SortedMap вторым конструктором. Элементы коллекции будут автоматически отсортированы в заданном порядке.