JavaRush /Java-Blog /Random-DE /Häufig gestellte Interviewfragen zu Sammlungsklassen in J...
theGrass
Level 24
Саратов

Häufig gestellte Interviewfragen zu Sammlungsklassen in Java (Teil 1)

Veröffentlicht in der Gruppe Random-DE
Zweifellos sind Sammlungen in Java ein sehr wichtiger Bereich, und in Interviews werden sowohl neuen als auch erfahrenen Programmierern Fragen zu Sammlungen gestellt. Das Thema ist so umfangreich, dass es fast unmöglich ist, es vollständig abzudecken. Dennoch werde ich versuchen, basierend auf meinen vorherigen Interviews, so viele GUTE Fragen wie möglich aufzulisten, auf die Sie vorbereitet sein sollten. Häufig gestellte Interviewfragen zu Sammlungsklassen in Java (Teil 1) - 1Die Fragen werden sowohl komplex als auch einfach sein. Wenn Ihnen die Frage also zu primitiv erscheint, vergessen Sie nicht, dass sie perfekt für einen weniger erfahrenen Programmierer ist.

Fragen in diesem Artikel:

Allgemeine Probleme
  1. Was sind Sammlungen in Java? Listen Sie ihre Vorteile auf
  2. Erzählen Sie uns etwas über die Sammlungshierarchie
  3. Warum erben Sammlungen keine Schnittstellen Cloneableund Serializable?
  4. Warum Maperbt die Schnittstelle die Schnittstelle nicht Collection?
Fragen zu Listen
  1. Warum verwenden wir Listen? Welche Hauptklassen implementieren die Schnittstelle List?
  2. Wie konvertiere ich ein String-Array in ArrayList?
  3. Wie sortiere ich eine Liste in umgekehrter Reihenfolge?
Fragen zu Sets
  1. Warum verwenden wir Mengen? Welche Hauptklassen implementieren die Schnittstelle Set?
  2. Wie werden Elemente gespeichert HashSet?
  3. Kann ein Element zu oder nullhinzugefügt werden ?TreeSetHashSet
Fragen zu Wörterbüchern
  1. Warum verwenden wir Wörterbücher? Welche Hauptklassen implementieren die Schnittstelle Map?
  2. Was ist IdentityHashMapund WeakHashMap?
  3. Erklären Sie, was das ist ConcurrentHashMap? Wie funktioniert es?
  4. Wie funktionieren Wörterbücher?
  5. Wie erstelle ich einen guten Wörterbuchschlüssel?
  6. Welche Inhaltsansichten bietet die Schnittstelle Map?
  7. Wann sollten Sie es verwenden HashMapund wann sollten Sie es verwenden TreeMap?
Fragen zu Unterschieden zwischen verschiedenen Sammlungen
  1. Was sind die Unterschiede zwischen Setund List?
  2. Was sind die Unterschiede zwischen Listund Map?
  3. Nennen Sie die Unterschiede zwischen HashMapundHashTable?
  4. Was sind die Unterschiede zwischen Vectorund ArrayList?
  5. Was sind die Unterschiede zwischen Iteratorund Enumeration?
  6. Was sind die Unterschiede zwischen HashMapund HashSet?
  7. Was sind die Unterschiede zwischen Iteratorund ListIterator?
  8. Was sind die Unterschiede zwischen TreeSetund SortedSet?
  9. Was sind die Unterschiede zwischen ArrayListund LinkedList?
Und noch mehr Fragen
  1. Wie mache ich eine Sammlung schreibgeschützt?
  2. Wie erstelle ich eine Thread-sichere Sammlung?
  3. Warum gibt es keine Methode Iterator.add()zum Hinzufügen von Elementen zu einer Sammlung?
  4. Welche Möglichkeiten gibt es, die Elemente einer Liste zu durchlaufen?
  5. Wie verstehen Sie, dass die Iterator-Eigenschaft funktioniert fail-fast?
  6. Was ist der Unterschied zwischen fail-fastund fail-safe?
  7. Wie vermeide ich das ConcurrentModificationExceptionbeim Durchlaufen einer Sammlung?
  8. Was ist passiert UnsupportedOperationException?
  9. Welche Sammlungsklassen ermöglichen den Zugriff auf ein beliebiges Element?
  10. Was ist passiert BlockingQueue?
  11. Was ist eine Warteschlange und ein Stapel? Listen Sie die Unterschiede zwischen ihnen auf.
  12. Was sind Schnittstellen Comparableund Comparator?
  13. Was sind Klassen Collectionsund Arrays?
  14. Liste der verwendeten Literatur
Beginnen wir ohne Zeitverlust mit den Erklärungen.

Allgemeine Probleme

  1. Was sind Sammlungen in Java? Ihre Vorteile auflisten?

    Per Definition ist eine Sammlung ein Objekt, das eine Gruppe von Objekten darstellt. Wie in der Mengenlehre ist eine Menge eine Gruppe von Objekten. Ganz einfach, nicht wahr? Vor JDK 1.2 gab es Klassen wie Vectorund HashTable, aber kein Framework Collection. Dann wurde beschlossen, Unterstützung für wiederverwendbare Datenstrukturen hinzuzufügen. Dieses Framework wurde hauptsächlich von Joshua Bloch entwickelt und erschien erstmals in JDK 1.2.

    Wir können die wichtigsten Vorteile auflisten:

    • Reduziert den Zeitaufwand für das Schreiben von Code
    • Verbessert die Leistung durch den Einsatz hocheffizienter Algorithmen und Datenstrukturen
    • Sammlungen sind eine universelle Möglichkeit zum Speichern und Übertragen von Daten, was die Interaktion verschiedener Teile des Codes vereinfacht
    • Leicht zu erlernen, da nur die obersten Schnittstellen und unterstützten Vorgänge erlernt werden müssen
  2. Erzählen Sie uns etwas über die Hierarchie der Sammlungen?

    Häufig gestellte Interviewfragen zu Sammlungsklassen in Java (Teil 1) – 2

    Wie im Bild gezeigt, enthält das Collections-Framework eine Schnittstelle der obersten Ebene – Collection, von der Set, Listund geerbt werden Queue. Im Folgenden werden wir uns viele weitere Klassen ansehen, die in diesen drei Zweigen enthalten sind. Merken Sie sich den Schnittstellentitel Collection, er hilft Ihnen bei vielen Fragen.

    public interface Collection extends Iterable {
    //описание методов
    }

    Das Framework enthält auch die Map-Schnittstelle , die kein Nachkomme von ist Collection. Den Grund, warum er nicht erbt, schauen wir uns Collectionin der vierten Frage an.

  3. Warum erben Sammlungen keine Schnittstellen Cloneableund Serializable?

    Nun, die einfachste Antwort lautet: „Weil es nicht notwendig ist.“ Die Funktionalität wird von Schnittstellen bereitgestellt Cloneableund Serializableist für Sammlungen einfach nicht erforderlich.

    Ein weiterer Grund besteht darin, dass eine Unterklasse nicht immer benötigt wird, Cloneableda jeder Klonvorgang viel Speicher verbraucht und unerfahrene Programmierer ihn verschwenden können, ohne die Konsequenzen zu verstehen.

    Und der letzte Grund ist, dass Klonen und Serialisierung sehr spezifische Vorgänge sind und nur bei Bedarf implementiert werden sollten. Viele Sammlungsklassen implementieren diese Schnittstellen, es besteht jedoch absolut keine Notwendigkeit, sie für alle Sammlungen im Allgemeinen zu implementieren. Wenn Sie Klonen und Serialisieren benötigen, verwenden Sie einfach die Klassen, an denen sie vorhanden sind. Wenn nicht, verwenden Sie die übrigen Klassen.

  4. Warum Maperbt die Schnittstelle die Schnittstelle nicht Collection?

    Eine gute Antwort auf diese Frage lautet: „Weil sie nicht kompatibel sind.“ Die Schnittstelle Collectionbeschreibt die Methode add(Object o).

    Wörterbücher können diese Methode nicht enthalten, da sie mit Schlüssel/Wert-Paaren arbeiten. Außerdem verfügen Wörterbücher über Darstellungen keySet, die valueSet,nicht in Sammlungen enthalten sind.

    Aufgrund dieser Unterschiede kann eine Schnittstelle Mapkeine Schnittstelle erben Collectionund ist ein separater Zweig der Hierarchie.

Fragen zu Listen

  1. Warum verwenden wir Listen? Welche Hauptklassen implementieren die Schnittstelle List?

    Listen in Java sind eine geordnete Sammlung von Elementen. Jedes Element hat einen Index, der bei Null beginnt. Alle Indizes sind eindeutig. Zusätzlich zu den in der Schnittstelle beschriebenen Methoden Collectionverfügen Listen über eigene Methoden, hauptsächlich für die Arbeit mit Sammlungselementen anhand ihres Index. Sie können diese Methoden in drei Gruppen einteilen: Suchen nach einem Element, Abrufen eines bestimmten Elements, Durchlaufen einer Sammlung und Auswählen einer Untergruppe. Alle diese Vorgänge können über den Elementindex ausgeführt werden.

    Die Hauptklassen, die die Schnittstelle implementieren , Listsind Stack, und . Nähere Informationen dazu finden Sie in der Dokumentation.VectorArrayListLinkedList

  2. Wie konvertiere ich ein String-Array in ArrayList?

    Diese Frage ist etwas tiefer als nur das Programmieren, wie es Anfängern scheint. Sein Zweck besteht darin, die Kenntnisse des Kandidaten über die Dienstprogrammklassen des Frameworks zu testen Collection. Betrachten wir zwei solcher Kurse, die bei Vorstellungsgesprächen am meisten nachgefragt werden – Collectionsund Arrays.

    Die Klasse Collectionsstellt statische Methoden für Operationen an Sammlungen bereit. Dementsprechend Arraysstellt es statische Methoden für Operationen auf Arrays bereit.

    String[] words = {"аз", "буки", "веди", "глагол", "добро"};
    //Как вы можете обратить внимание, у нас есть массив строк String[] words.
    //В котором у нас лежат 5 строк.
    List wordList = Arrays.asList(words);
    //легким движением руки, а точнее вызовом Arrays.asList() мы превратoder наш
    //массив строк в список List wordList.

    Ich möchte auch darauf hinweisen, dass diese Methode nicht nur Zeichenfolgen verarbeiten kann, sondern auch eine Liste von Elementen aller Art erstellt, aus denen das Array besteht.

    Integer[] nums = {1, 2, 3, 4};
    List numList = Arrays.asList(nums);
  3. Wie sortiere ich eine Liste in umgekehrter Reihenfolge?

    Wie die vorherige Frage testet diese Frage Ihr Wissen über Utility-Klassen.Collection

    List reversedList = Collections.reverse(list);

Fragen zu Sets

  1. Warum verwenden wir Mengen? Welche Hauptklassen implementieren die Schnittstelle Set?

    Он моделирует математическое множество, из теории множеств. Интерфейс Set похож на List, но имеет некоторые отличия. Первое — это не упорядоченная коллекция. Следовательно, добавление/удаление элементов не требует их сортировки. Главная особенность множеств - уникальность элементов, то есть один и тот же элемент не может содержаться в множестве дважды.

    Очень важными для функционирования множеств являются методы equals() и hashCode(), они позволяют сравнивать множества разных классов. Два множества являются идентичными только если они содержат одни и те же элементы.

    Как следует из вышеизложенного, множества не поддерживают операций основанных на индексе Element, Wie списки. Множества имеют только те методы которые описаны в интерфейсе Collection

    Основными классами, реализующими интерфейс Set, являются EnumSet, HashSet, LinkedHashSet и TreeSet. Если хотите узнать больше — почитайте соответствующие разделы dokumentierenации Java.

  2. Как хранятся элементы в HashSet?

    Как вы уже в курсе, HashMap хранит пары ключ/Bedeutung, и ключи должны быть уникальны. HashSet использует эту особенность HashMap для обеспечения уникальности своих элементов. В классе HashSet, словарь описан следующим образом:

    private transient HashMap<E, Object> map;
    private static final Object PRESENT = new Object();

    Итак, когда вы сохраняете элемент в множестве, оно кладет данный элемент в качестве ключа в словарь, а Bedeutungм идет ein Objekt PRESENT, Wie это описано ниже:

    public boolean add(E e) {
      return map.put(e, PRESENT) == null;
    }

    Я настоятельно рекомендую вам прочесть эту статью, это поможет вам с легкостью ответить на все связанные с HashMap вопросы.

  3. Может ли элемент null быть добавлен в TreeSet oder 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?

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

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

  2. Was такое IdentityHashMap и WeakHashMap?

    IdentityHashMap похож на HashMap за одним исключением — для сравнения ein Objektов используется сравнение указателей на ein Objektы, если указатели не равны (указывают на ein Objektы лежащие по разным Adresseам), значит ein Objektы считаются различными.

    IdentityHashMap является довольно редко используемым. Хотя он реализует интерфейс Map, он нарушает один из основных принципов устройства Map, который требует использования метода equals() для сравнения ein Objektов.

    IdentityHashMap используется только в тех случаях, когда требуется сравнение ein Objektов по их Adresseам.

    WeakHashMap это реализация интерфейса Map, которая содержит слабые ссылки на элементы. То есть, если за пределами WeakHashMap не осталось ни одной ссылки на его элемент, этот элемент удаляется сборщиком мусора. Класс предназначен для использования с ein Objektами, у которых метод equals() проверяет идентичность ein Objektов с помощью оператора ==. После того Wie элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится.

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

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

  4. Как работает hashmap?

    Самый важный вопрос, который скорее всего будет задан на собеседовании программисту любого уровня. Вы должны хорошо разбираться в этой теме, и не только потому что это самый задаваемый вопрос, но и потому что понимание устройства hashmap позволяет вам легче разобраться в других особенностях работы коллекций.

    Ответ на этот вопрос очень обширный, и völlig его можно прочесть в этой статье — Wie работает hashmap. А на данный момент просто запомните что HashMap работает на основе хэширования. Словарь, по определению, это ein Objekt который связывает ключи и значения. Для хранения таких структур, он использует внутренний класс Entry.

    static class Entry implements Map.Entry
    {
    final K key;
    V value;
    Entry next;
    final int hash;
    ...//Еще много Codeа тут
    }

    Переменные key и value служат для хранения ключа и значения. А сами ein Objektы Entry лежат в массиве.

    /**
    * Размер таблицы меняется по необходимости,
    * и обязательно должен быть gleicht степени двойки
    */
    transient Entry[] table;

    Индекс нужного Element в массиве вычисляется по хэш-Codeу ключа. Больше информации можете получить по ссылке в начале ответа.

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

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

    hashCodeWie aus dem oben Gesagten hervorgeht, sollte ein guter Schlüssel immer wieder denselben Schlüssel liefern , egal wie oft er angefordert wird. Außerdem equals()sollten identische Schlüssel beim Aufruf einer Methode „true“ und unterschiedliche Schlüssel „false“ zurückgeben.

    Daraus folgt, dass die besten Kandidaten für die Rolle eines Schlüssels unveränderliche Klassen sind.

    Weitere Informationen finden Sie unter .

  6. Welche Inhaltsansichten bietet die Schnittstelle Map?

    Die Schnittstelle Mapbietet drei Ansichten der gespeicherten Daten:

    • Satz aller Schlüssel
    • Menge aller Werte
    • eine Reihe von Objekten Entry, die sowohl einen Schlüssel als auch einen Wert enthalten

    Sie können mithilfe von Iteratoren durch sie navigieren.

  7. Wann sollten Sie es verwenden HashMapund wann sollten Sie es verwenden TreeMap?

    HashMapDies ist eine sehr weit verbreitete Klasse und Sie wissen es. Daher beschränke ich mich darauf, zu sagen, dass es Schlüssel/Wert-Paare speichert und es Ihnen ermöglicht, viele Operationen mit ihnen durchzuführen.

    TreeMapDas ist eine besondere Sorte HashMap. Der Unterschied besteht darin, dass die Schlüssel TreeMapgeordnet aufbewahrt werden. Der Standardwert ist „natürliche Sortierung“. Sie können die Sortierung überschreiben, indem Sie eine Instanz der Klasse bereitstellen Comparator, deren Methode comparezum Sortieren der Schlüssel verwendet wird.

    Bitte beachten Sie, dass alle dem Wörterbuch hinzugefügten Schlüssel die Schnittstelle implementieren müssen Comparable(dies ist für die Sortierung erforderlich). Darüber hinaus müssen alle Schlüssel untereinander kompatibel sein: k1.compareTo(k2)Sie dürfen keine aufrufen ClassCastExceptionund k1im k2Wörterbuch gespeichert werden. Wenn der Benutzer versucht, einen Schlüssel in das Wörterbuch einzufügen, der gegen diese Bedingung verstößt (z. B. einen Zeichenfolgenschlüssel in ein Wörterbuch, in dem alle Schlüssel vom Typ sind Integer), put(Object key, Object value)sollte die Methode aufrufen ClassCastException.

Originaler Artikel
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION