Preguntas en este artículo:
Asuntos Generales- ¿Qué son las colecciones en Java? Enumere sus ventajas
- Cuéntanos sobre la jerarquía de la colección.
- ¿Por qué las colecciones no heredan las interfaces
Cloneable
ySerializable
? - ¿ Por qué
Map
la interfaz no hereda la interfazCollection
?
- ¿Por qué utilizamos listas? ¿Qué clases principales implementan la interfaz
List
? - ¿ Cómo convertir una matriz de cadenas a
ArrayList
? - ¿Cómo ordenar una lista en orden inverso?
- ¿Por qué utilizamos conjuntos? ¿Qué clases principales implementan la interfaz
Set
? - ¿ Cómo se almacenan los elementos
HashSet
? null
¿Se puede agregar un elemento aTreeSet
oHashSet
?
- ¿Por qué utilizamos diccionarios? ¿Qué clases principales implementan la interfaz
Map
? - ¿Qué es
IdentityHashMap
yWeakHashMap
? - ¿ Explica qué es esto
ConcurrentHashMap
? ¿Como funciona? - ¿Cómo funcionan los diccionarios?
- ¿Cómo crear una buena clave de diccionario?
- ¿Qué vistas de contenido proporciona la interfaz
Map
? - ¿Cuándo deberías usarlo
HashMap
y cuándo deberías usarloTreeMap
?
- ¿Cuáles son las diferencias entre
Set
yList
? - ¿Cuáles son las diferencias entre
List
yMap
? - Nombra las diferencias entre
HashMap
yHashTable?
- ¿Cuáles son las diferencias entre
Vector
yArrayList
? - ¿Cuáles son las diferencias entre
Iterator
yEnumeration
? - ¿Cuáles son las diferencias entre
HashMap
yHashSet
? - ¿Cuáles son las diferencias entre
Iterator
yListIterator
? - ¿Cuáles son las diferencias entre
TreeSet
ySortedSet
? - ¿Cuáles son las diferencias entre
ArrayList
yLinkedList
?
- ¿Cómo hacer que una colección sea de solo lectura?
- ¿Cómo hacer una colección segura para subprocesos?
- ¿Por qué no existe un método
Iterator.add()
para agregar elementos a una colección? - ¿Qué formas existen de iterar sobre los elementos de una lista?
- ¿Cómo entiende que funciona la propiedad del iterador
fail-fast
? - ¿ Cuál es la diferencia entre
fail-fast
yfail-safe
? - ¿ Cómo evitarlo
ConcurrentModificationException
al iterar a través de una colección? - Qué ha pasado
UnsupportedOperationException
? - ¿Qué clases de colección dan acceso a cualquier elemento?
- Qué ha pasado
BlockingQueue
? - ¿Qué es una cola y una pila? Enumere las diferencias entre ellas.
- ¿Qué son las interfaces
Comparable
yComparator
? - ¿Qué son las clases
Collections
yArrays
? - Lista de literatura usada
Asuntos Generales
-
¿Qué son las colecciones en Java? ¿Enumerar sus ventajas?
Por definición, una colección es un objeto que es un grupo de objetos. Como en la teoría de conjuntos, un conjunto es un grupo de objetos. Sencillo, ¿no? Antes de JDK 1.2, había clases como
Vector
yHashTable
, pero no existía el marcoCollection
. Luego se decidió agregar soporte para estructuras de datos reutilizables. Este marco fue desarrollado principalmente por Joshua Bloch y apareció por primera vez en JDK 1.2.Podemos enumerar las principales ventajas:
- Reduce el tiempo dedicado a escribir código
- Mejora el rendimiento mediante el uso de algoritmos y estructuras de datos altamente eficientes.
- Las colecciones son una forma universal de almacenar y transferir datos, lo que simplifica la interacción de diferentes partes del código.
- Fácil de aprender porque solo es necesario aprender las interfaces más importantes y las operaciones admitidas.
-
¿Cuéntanos sobre la jerarquía de las colecciones?
Como se muestra en la imagen, el marco de colecciones contiene una interfaz de nivel superior
Collection
, de la cual se heredanSet
y . A continuación veremos muchas más clases contenidas en estas tres ramas. Recuerda el título de la interfaz , te ayudará con muchas preguntas.List
Queue
Collection
public interface Collection extends Iterable { //описание методов }
El marco también contiene la interfaz Map , que no es descendiente de
Collection
. Veremos la razón por la que no heredaCollection
en la cuarta pregunta. -
¿Por qué las colecciones no heredan las interfaces
Cloneable
ySerializable
?Bueno, la respuesta más sencilla es “porque no es necesario”. La funcionalidad la proporcionan las interfaces
Cloneable
ySerializable
simplemente no es necesaria para las colecciones.Otra razón es que no siempre se necesita una subclase
Cloneable
porque cada operación de clonación consume mucha memoria y los programadores sin experiencia pueden desperdiciarla sin comprender las consecuencias.Y la última razón es que la clonación y la serialización son operaciones muy específicas y deben implementarse sólo cuando sea necesario. Muchas clases de colección implementan estas interfaces, pero no hay absolutamente ninguna necesidad de implementarlas para todas las colecciones en general. Si necesita clonación y serialización, simplemente use aquellas clases donde está, si no, use las clases restantes.
-
¿ Por qué
Map
la interfaz no hereda la interfazCollection
?Una buena respuesta a esta pregunta es "porque son incompatibles". La interfaz
Collection
describe el métodoadd(Object o)
.Los diccionarios no pueden contener este método porque funcionan con pares clave/valor. Además, los diccionarios tienen representaciones
keySet
quevalueSet,
no están en colecciones.Debido a estas diferencias, una interfaz
Map
no puede heredar una interfazCollection
y es una rama separada de la jerarquía.
Preguntas sobre listas
-
¿Por qué utilizamos listas? ¿Qué clases principales implementan la interfaz
List
?Las listas en Java son una colección ordenada de elementos. Cada elemento tiene un índice que comienza desde cero. Todos los índices son únicos. Además de los métodos descritos en la interfaz
Collection
, las listas tienen sus propios métodos, principalmente para trabajar con elementos de colección por su índice. Puede dividir estos métodos en 3 grupos: buscar un elemento, obtener un elemento específico, recorrer una colección y seleccionar un subgrupo. Todas estas operaciones se pueden realizar por índice de elementos.Las principales clases que implementan la interfaz
List
sonStack
,Vector
yArrayList
.LinkedList
Para obtener información más detallada sobre ellos, consulte la documentación. -
¿ Cómo convertir una matriz de cadenas a
ArrayList
?Esta pregunta es algo más profunda que la simple programación, como les parece a los principiantes. Su propósito es probar el conocimiento del candidato sobre las clases de utilidad del marco
Collection
. Consideremos dos de esas clases que tienen mayor demanda durante las entrevistas:Collections
yArrays
.La clase
Collections
proporciona métodos estáticos para operaciones en colecciones. En consecuencia,Arrays
proporciona métodos estáticos para operaciones en matrices.String[] words = {"аз", "буки", "веди", "глагол", "добро"}; //Как вы можете обратить внимание, у нас есть массив строк String[] words. //В котором у нас лежат 5 строк. List wordList = Arrays.asList(words); //легким движением руки, а точнее вызовом Arrays.asList() мы превратo наш //массив строк в список List wordList.
También me gustaría señalar que este método es capaz de procesar no solo cadenas, sino que creará una lista de elementos de cualquier tipo que sea la matriz.
Integer[] nums = {1, 2, 3, 4}; List numList = Arrays.asList(nums);
-
¿Cómo ordenar una lista en orden inverso?
Al igual que la anterior, esta pregunta pone a prueba tu conocimiento de las clases de utilidad.
Collection
List reversedList = Collections.reverse(list);
Preguntas sobre conjuntos
-
¿Por qué utilizamos conjuntos? ¿Qué clases principales implementan la interfaz
Set
?Он моделирует математическое множество, из теории множеств. Интерфейс
Set
похож наList
, но имеет некоторые отличия. Первое — это не упорядоченная коллекция. Следовательно, добавление/удаление элементов не требует их сортировки. Главная особенность множеств - уникальность элементов, то есть один и тот же элемент не может содержаться в множестве дважды.Очень важными для функционирования множеств являются методы
equals()
иhashCode()
, они позволяют сравнивать множества разных классов. Два множества являются идентичными только если они содержат одни и те же элементы.Как следует из вышеизложенного, множества не поддерживают операций основанных на индексе elemento, Cómo списки. Множества имеют только те методы которые описаны в интерфейсе
Collection
Основными классами, реализующими интерфейс
Set
, являютсяEnumSet
,HashSet
,LinkedHashSet
иTreeSet
. Если хотите узнать больше — почитайте соответствующие разделы documentoации Java. -
Как хранятся элементы в
HashSet
?Как вы уже в курсе,
HashMap
хранит пары ключ/significado, и ключи должны быть уникальны.HashSet
использует эту особенностьHashMap
для обеспечения уникальности своих элементов. В классеHashSet
, словарь описан следующим образом:private transient HashMap<E, Object> map; private static final Object PRESENT = new Object();
Итак, когда вы сохраняете элемент в множестве, оно кладет данный элемент в качестве ключа в словарь, а significadoм идет un objeto PRESENT, Cómo это описано ниже:
public boolean add(E e) { return map.put(e, PRESENT) == null; }
Я настоятельно рекомендую вам прочесть эту статью, это поможет вам с легкостью ответить на все связанные с
HashMap
вопросы. -
Может ли элемент
null
быть добавлен вTreeSet
oHashSet
?Как видно из предыдущего ответа, в методе
add()
нет проверки наnull
. Также,HashMap
позволяет один ключnull
, следовательно, один элементnull
может быть добавлен вHashSet
.TreeSet
работает по тому же принципу что иHashSet
, но используетNavigableMap
для хранения элементовprivate transient NavigableMap<E,Object> m; private static final Object PRESENT = new Object();
NavigableMap
это класс-наследникSortedMap
, аSortedMap
не позволяет использование ключейnull
. Следовательно, иTreeMap
не поддерживает хранение элементов типаnull
. Если вы попробуете добавитьnull в TreeSet
, получите исключениеNullPointerException
.
Вопросы про словари
-
Почему мы используем словари (
Map
)? Какие основные классы реализуют интерфейсMap
?Словари — специальный тип коллекции, которая используется для хранения пар ключ/significado. По этой причине он не является наследником интерфейса
Collection
. Словарь предоставляет методы для добавления пар ключ/significado, удаления, поиска и перебора по предоставляемым словарем представлениям данных.Основные классы реализующие интерфейс
Map
:HashMap
,Hashtable
,EnumMap
,IdentityHashMap
,LinkedHashMap
иProperties
. -
Qué такое
IdentityHashMap
иWeakHashMap
?IdentityHashMap
похож наHashMap
за одним исключением — для сравнения un objetoов используется сравнение указателей на un objetoы, если указатели не равны (указывают на un objetoы лежащие по разным DIRECCIÓNам), значит un objetoы считаются различными.IdentityHashMap
является довольно редко используемым. Хотя он реализует интерфейсMap
, он нарушает один из основных принципов устройстваMap
, который требует использования методаequals()
для сравнения un objetoов.IdentityHashMap
используется только в тех случаях, когда требуется сравнение un objetoов по их DIRECCIÓNам.WeakHashMap
это реализация интерфейсаMap
, которая содержит слабые ссылки на элементы. То есть, если за пределамиWeakHashMap
не осталось ни одной ссылки на его элемент, этот элемент удаляется сборщиком мусора. Класс предназначен для использования с un objetoами, у которых методequals()
проверяет идентичность un objetoов с помощью оператора==
. После того Cómo элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится. -
Объясните что такое
ConcurrentHashMap
? Как оно работает?Взято с официальной documentoации:
Реализация словаря completamente поддерживающая многопоточное добавление/удаление/поиск элементов. Данный класс следует тем же спецификациям что иHashtable
, и содержит методы соответствующие методамHashtable
. Однако, хотя все операции являются потокобезопасными, операция по выборке элементов не блокирует таблицу, и вообще нет возможности запретить весь доступ к таблице. Этот класс совместим сHashtable
во всем кроме вопросов многопоточной синхронизации. -
Как работает
hashmap
?Самый важный вопрос, который скорее всего будет задан на собеседовании программисту любого уровня. Вы должны хорошо разбираться в этой теме, и не только потому что это самый задаваемый вопрос, но и потому что понимание устройства
hashmap
позволяет вам легче разобраться в других особенностях работы коллекций.Ответ на этот вопрос очень обширный, и completamente его можно прочесть в этой статье — Cómo работает hashmap. А на данный момент просто запомните что
HashMap
работает на основе хэширования. Словарь, по определению, это un objeto который связывает ключи и значения. Для хранения таких структур, он использует внутренний классEntry
.static class Entry implements Map.Entry { final K key; V value; Entry next; final int hash; ...//Еще много códigoа тут }
Переменные
key
иvalue
служат для хранения ключа и значения. А сами un objetoыEntry
лежат в массиве./** * Размер таблицы меняется по необходимости, * и обязательно должен быть es igual степени двойки */ transient Entry[] table;
Индекс нужного elemento в массиве вычисляется по хэш-códigoу ключа. Больше информации можете получить по ссылке в начале ответа.
-
Как создать хороший ключ для словаря?
Следующий хороший вопрос, который обычно задают следом за вопросом о функционировании
HashMap
. Итак, главное ограничение — ключ должен быть таким, чтобы потом по нему можно было получить из словаря significado. Иначе в его использовании просто нет смысла. Если вы понимаете Cómo функционируетhashmap
, вы знаете что его работа сильно зависит от методовhashCode()
иequals()
un objetoов-ключей.Como se desprende de lo anterior, una buena clave debe dar la misma una
hashCode
y otra vez, sin importar cuántas veces se solicite. Y además, claves idénticasequals()
deberían devolver verdadero al llamar a un método, y claves diferentes deberían devolver falso.De lo que se deduce que los mejores candidatos para el papel de clave son las clases inmutables.
Puedes leer más en .
-
¿Qué vistas de contenido proporciona la interfaz
Map
?La interfaz
Map
proporciona tres vistas de los datos almacenados:- conjunto de todas las llaves
- conjunto de todos los valores
- un conjunto de objetos
Entry
que contienen tanto una clave como un valor
Puede navegar a través de ellos utilizando iteradores.
-
¿Cuándo deberías usarlo
HashMap
y cuándo deberías usarloTreeMap
?HashMap
Esta es una clase muy utilizada y lo sabes. Entonces, me limitaré a decir que almacena pares clave/valor y permite realizar muchas operaciones sobre ellos.TreeMap
esta es una variedad especialHashMap
. La diferencia es que las clavesTreeMap
se almacenan de forma ordenada. El valor predeterminado es "clasificación natural". Puede anular la clasificación proporcionando una instancia de la claseComparator
,compare
cuyo método se utilizará para ordenar las claves.Tenga en cuenta que todas las claves agregadas al diccionario deben implementar la interfaz
Comparable
(esto es necesario para ordenar). Además, todas las claves deben ser mutuamente compatibles:k1.compareTo(k2)
no deben solicitarseClassCastException
ningunak1
yk2
almacenarse en el diccionario. Si el usuario intenta colocar una clave en el diccionario que viola esta condición (por ejemplo, una clave de cadena en un diccionario donde todas las claves son de tipoInteger
), el métodoput(Object key, Object value)
debe llamarClassCastException
.
GO TO FULL VERSION