JavaRush /Blog Java /Random-ES /Preguntas frecuentes de la entrevista sobre clases de col...
theGrass
Nivel 24
Саратов

Preguntas frecuentes de la entrevista sobre clases de colección en Java (Parte 1)

Publicado en el grupo Random-ES
Sin duda, las colecciones en Java son un área muy importante, y se harán preguntas sobre colecciones en entrevistas tanto para programadores nuevos como para experimentados. El tema es tan amplio que es casi imposible abarcarlo en su totalidad. Aún así, basándome en mis entrevistas anteriores, intentaré enumerar tantas BUENAS preguntas como sea posible para las que debes estar preparado. Preguntas frecuentes de la entrevista sobre clases de colección en Java (Parte 1) - 1Las preguntas serán a la vez complejas y sencillas, así que si la pregunta te parece demasiado primitiva, no olvides que es perfecta para un programador menos experimentado.

Preguntas en este artículo:

Asuntos Generales
  1. ¿Qué son las colecciones en Java? Enumere sus ventajas
  2. Cuéntanos sobre la jerarquía de la colección.
  3. ¿Por qué las colecciones no heredan las interfaces Cloneabley Serializable?
  4. ¿ Por qué Mapla interfaz no hereda la interfaz Collection?
Preguntas sobre listas
  1. ¿Por qué utilizamos listas? ¿Qué clases principales implementan la interfaz List?
  2. ¿ Cómo convertir una matriz de cadenas a ArrayList?
  3. ¿Cómo ordenar una lista en orden inverso?
Preguntas sobre conjuntos
  1. ¿Por qué utilizamos conjuntos? ¿Qué clases principales implementan la interfaz Set?
  2. ¿ Cómo se almacenan los elementos HashSet?
  3. null¿Se puede agregar un elemento a TreeSeto HashSet?
Preguntas sobre diccionarios
  1. ¿Por qué utilizamos diccionarios? ¿Qué clases principales implementan la interfaz Map?
  2. ¿Qué es IdentityHashMapy WeakHashMap?
  3. ¿ Explica qué es esto ConcurrentHashMap? ¿Como funciona?
  4. ¿Cómo funcionan los diccionarios?
  5. ¿Cómo crear una buena clave de diccionario?
  6. ¿Qué vistas de contenido proporciona la interfaz Map?
  7. ¿Cuándo deberías usarlo HashMapy cuándo deberías usarlo TreeMap?
Preguntas sobre diferencias entre diferentes colecciones.
  1. ¿Cuáles son las diferencias entre Sety List?
  2. ¿Cuáles son las diferencias entre Listy Map?
  3. Nombra las diferencias entre HashMapyHashTable?
  4. ¿Cuáles son las diferencias entre Vectory ArrayList?
  5. ¿Cuáles son las diferencias entre Iteratory Enumeration?
  6. ¿Cuáles son las diferencias entre HashMapy HashSet?
  7. ¿Cuáles son las diferencias entre Iteratory ListIterator?
  8. ¿Cuáles son las diferencias entre TreeSety SortedSet?
  9. ¿Cuáles son las diferencias entre ArrayListy LinkedList?
Y más preguntas
  1. ¿Cómo hacer que una colección sea de solo lectura?
  2. ¿Cómo hacer una colección segura para subprocesos?
  3. ¿Por qué no existe un método Iterator.add()para agregar elementos a una colección?
  4. ¿Qué formas existen de iterar sobre los elementos de una lista?
  5. ¿Cómo entiende que funciona la propiedad del iterador fail-fast?
  6. ¿ Cuál es la diferencia entre fail-fasty fail-safe?
  7. ¿ Cómo evitarlo ConcurrentModificationExceptional iterar a través de una colección?
  8. Qué ha pasado UnsupportedOperationException?
  9. ¿Qué clases de colección dan acceso a cualquier elemento?
  10. Qué ha pasado BlockingQueue?
  11. ¿Qué es una cola y una pila? Enumere las diferencias entre ellas.
  12. ¿Qué son las interfaces Comparabley Comparator?
  13. ¿Qué son las clases Collectionsy Arrays?
  14. Lista de literatura usada
Sin perder tiempo, comencemos con las explicaciones.

Asuntos Generales

  1. ¿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 Vectory HashTable, pero no existía el marco Collection. 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.
  2. ¿Cuéntanos sobre la jerarquía de las colecciones?

    Preguntas frecuentes de la entrevista sobre clases de colección en Java (Parte 1) - 2

    Como se muestra en la imagen, el marco de colecciones contiene una interfaz de nivel superior Collection, de la cual se heredan Sety . 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.ListQueueCollection

    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 hereda Collectionen la cuarta pregunta.

  3. ¿Por qué las colecciones no heredan las interfaces Cloneabley Serializable?

    Bueno, la respuesta más sencilla es “porque no es necesario”. La funcionalidad la proporcionan las interfaces Cloneabley Serializablesimplemente no es necesaria para las colecciones.

    Otra razón es que no siempre se necesita una subclase Cloneableporque 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.

  4. ¿ Por qué Mapla interfaz no hereda la interfaz Collection?

    Una buena respuesta a esta pregunta es "porque son incompatibles". La interfaz Collectiondescribe el método add(Object o).

    Los diccionarios no pueden contener este método porque funcionan con pares clave/valor. Además, los diccionarios tienen representaciones keySetque valueSet,no están en colecciones.

    Debido a estas diferencias, una interfaz Mapno puede heredar una interfaz Collectiony es una rama separada de la jerarquía.

Preguntas sobre listas

  1. ¿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 Listson Stack, Vectory ArrayList. LinkedListPara obtener información más detallada sobre ellos, consulte la documentación.

  2. ¿ 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: Collectionsy Arrays.

    La clase Collectionsproporciona métodos estáticos para operaciones en colecciones. En consecuencia, Arraysproporciona 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);
  3. ¿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

  1. ¿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.

  2. Как хранятся элементы в 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 вопросы.

  3. Может ли элемент null быть добавлен в TreeSet o HashSet?

    Как видно из предыдущего ответа, в методе 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.

Вопросы про словари

  1. Почему мы используем словари (Map)? Какие основные классы реализуют интерфейс Map?

    Словари — специальный тип коллекции, которая используется для хранения пар ключ/significado. По этой причине он не является наследником интерфейса Collection. Словарь предоставляет методы для добавления пар ключ/significado, удаления, поиска и перебора по предоставляемым словарем представлениям данных.

    Основные классы реализующие интерфейс Map: HashMap, Hashtable, EnumMap, IdentityHashMap, LinkedHashMap и Properties.

  2. 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 элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится.

  3. Объясните что такое ConcurrentHashMap? Как оно работает?

    Взято с официальной documentoации:
    Реализация словаря completamente поддерживающая многопоточное добавление/удаление/поиск элементов. Данный класс следует тем же спецификациям что и Hashtable, и содержит методы соответствующие методам Hashtable. Однако, хотя все операции являются потокобезопасными, операция по выборке элементов не блокирует таблицу, и вообще нет возможности запретить весь доступ к таблице. Этот класс совместим с Hashtable во всем кроме вопросов многопоточной синхронизации.

  4. Как работает 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у ключа. Больше информации можете получить по ссылке в начале ответа.

  5. Как создать хороший ключ для словаря?

    Следующий хороший вопрос, который обычно задают следом за вопросом о функционировании HashMap. Итак, главное ограничение — ключ должен быть таким, чтобы потом по нему можно было получить из словаря significado. Иначе в его использовании просто нет смысла. Если вы понимаете Cómo функционирует hashmap, вы знаете что его работа сильно зависит от методов hashCode() и equals() un objetoов-ключей.

    Como se desprende de lo anterior, una buena clave debe dar la misma una hashCodey otra vez, sin importar cuántas veces se solicite. Y además, claves idénticas equals()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 .

  6. ¿Qué vistas de contenido proporciona la interfaz Map?

    La interfaz Mapproporciona tres vistas de los datos almacenados:

    • conjunto de todas las llaves
    • conjunto de todos los valores
    • un conjunto de objetos Entryque contienen tanto una clave como un valor

    Puede navegar a través de ellos utilizando iteradores.

  7. ¿Cuándo deberías usarlo HashMapy cuándo deberías usarlo TreeMap?

    HashMapEsta 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.

    TreeMapesta es una variedad especial HashMap. La diferencia es que las claves TreeMapse almacenan de forma ordenada. El valor predeterminado es "clasificación natural". Puede anular la clasificación proporcionando una instancia de la clase Comparator, comparecuyo 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 solicitarse ClassCastExceptionninguna k1y k2almacenarse 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 tipo Integer), el método put(Object key, Object value)debe llamar ClassCastException.

Artículo original
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION