Fragen in diesem Artikel:
Allgemeine Probleme- Was sind Sammlungen in Java? Listen Sie ihre Vorteile auf
- Erzählen Sie uns etwas über die Sammlungshierarchie
- Warum erben Sammlungen keine Schnittstellen
Cloneable
undSerializable
? - Warum
Map
erbt die Schnittstelle die Schnittstelle nichtCollection
?
- Warum verwenden wir Listen? Welche Hauptklassen implementieren die Schnittstelle
List
? - Wie konvertiere ich ein String-Array in
ArrayList
? - Wie sortiere ich eine Liste in umgekehrter Reihenfolge?
- Warum verwenden wir Mengen? Welche Hauptklassen implementieren die Schnittstelle
Set
? - Wie werden Elemente gespeichert
HashSet
? - Kann ein Element zu oder
null
hinzugefügt werden ?TreeSet
HashSet
- Warum verwenden wir Wörterbücher? Welche Hauptklassen implementieren die Schnittstelle
Map
? - Was ist
IdentityHashMap
undWeakHashMap
? - Erklären Sie, was das ist
ConcurrentHashMap
? Wie funktioniert es? - Wie funktionieren Wörterbücher?
- Wie erstelle ich einen guten Wörterbuchschlüssel?
- Welche Inhaltsansichten bietet die Schnittstelle
Map
? - Wann sollten Sie es verwenden
HashMap
und wann sollten Sie es verwendenTreeMap
?
- Was sind die Unterschiede zwischen
Set
undList
? - Was sind die Unterschiede zwischen
List
undMap
? - Nennen Sie die Unterschiede zwischen
HashMap
undHashTable?
- Was sind die Unterschiede zwischen
Vector
undArrayList
? - Was sind die Unterschiede zwischen
Iterator
undEnumeration
? - Was sind die Unterschiede zwischen
HashMap
undHashSet
? - Was sind die Unterschiede zwischen
Iterator
undListIterator
? - Was sind die Unterschiede zwischen
TreeSet
undSortedSet
? - Was sind die Unterschiede zwischen
ArrayList
undLinkedList
?
- Wie mache ich eine Sammlung schreibgeschützt?
- Wie erstelle ich eine Thread-sichere Sammlung?
- Warum gibt es keine Methode
Iterator.add()
zum Hinzufügen von Elementen zu einer Sammlung? - Welche Möglichkeiten gibt es, die Elemente einer Liste zu durchlaufen?
- Wie verstehen Sie, dass die Iterator-Eigenschaft funktioniert
fail-fast
? - Was ist der Unterschied zwischen
fail-fast
undfail-safe
? - Wie vermeide ich das
ConcurrentModificationException
beim Durchlaufen einer Sammlung? - Was ist passiert
UnsupportedOperationException
? - Welche Sammlungsklassen ermöglichen den Zugriff auf ein beliebiges Element?
- Was ist passiert
BlockingQueue
? - Was ist eine Warteschlange und ein Stapel? Listen Sie die Unterschiede zwischen ihnen auf.
- Was sind Schnittstellen
Comparable
undComparator
? - Was sind Klassen
Collections
undArrays
? - Liste der verwendeten Literatur
Allgemeine Probleme
-
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
Vector
undHashTable
, aber kein FrameworkCollection
. 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
-
Erzählen Sie uns etwas über die Hierarchie der Sammlungen?
Wie im Bild gezeigt, enthält das Collections-Framework eine Schnittstelle der obersten Ebene –
Collection
, von derSet
,List
und geerbt werdenQueue
. Im Folgenden werden wir uns viele weitere Klassen ansehen, die in diesen drei Zweigen enthalten sind. Merken Sie sich den SchnittstellentitelCollection
, 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 unsCollection
in der vierten Frage an. -
Warum erben Sammlungen keine Schnittstellen
Cloneable
undSerializable
?Nun, die einfachste Antwort lautet: „Weil es nicht notwendig ist.“ Die Funktionalität wird von Schnittstellen bereitgestellt
Cloneable
undSerializable
ist für Sammlungen einfach nicht erforderlich.Ein weiterer Grund besteht darin, dass eine Unterklasse nicht immer benötigt wird,
Cloneable
da 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.
-
Warum
Map
erbt die Schnittstelle die Schnittstelle nichtCollection
?Eine gute Antwort auf diese Frage lautet: „Weil sie nicht kompatibel sind.“ Die Schnittstelle
Collection
beschreibt die Methodeadd(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
, dievalueSet,
nicht in Sammlungen enthalten sind.Aufgrund dieser Unterschiede kann eine Schnittstelle
Map
keine Schnittstelle erbenCollection
und ist ein separater Zweig der Hierarchie.
Fragen zu Listen
-
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
Collection
verfü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 ,
List
sindStack
, und . Nähere Informationen dazu finden Sie in der Dokumentation.Vector
ArrayList
LinkedList
-
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 –Collections
undArrays
.Die Klasse
Collections
stellt statische Methoden für Operationen an Sammlungen bereit. DementsprechendArrays
stellt 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);
-
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
-
Warum verwenden wir Mengen? Welche Hauptklassen implementieren die Schnittstelle
Set
?Он моделирует математическое множество, из теории множеств. Интерфейс
Set
похож наList
, но имеет некоторые отличия. Первое — это не упорядоченная коллекция. Следовательно, добавление/удаление элементов не требует их сортировки. Главная особенность множеств - уникальность элементов, то есть один и тот же элемент не может содержаться в множестве дважды.Очень важными для функционирования множеств являются методы
equals()
иhashCode()
, они позволяют сравнивать множества разных классов. Два множества являются идентичными только если они содержат одни и те же элементы.Как следует из вышеизложенного, множества не поддерживают операций основанных на индексе Element, Wie списки. Множества имеют только те методы которые описаны в интерфейсе
Collection
Основными классами, реализующими интерфейс
Set
, являютсяEnumSet
,HashSet
,LinkedHashSet
иTreeSet
. Если хотите узнать больше — почитайте соответствующие разделы dokumentierenации Java. -
Как хранятся элементы в
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
вопросы. -
Может ли элемент
null
быть добавлен вTreeSet
oderHashSet
?Как видно из предыдущего ответа, в методе
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
?Словари — специальный тип коллекции, которая используется для хранения пар ключ/Bedeutung. По этой причине он не является наследником интерфейса
Collection
. Словарь предоставляет методы для добавления пар ключ/Bedeutung, удаления, поиска и перебора по предоставляемым словарем представлениям данных.Основные классы реализующие интерфейс
Map
:HashMap
,Hashtable
,EnumMap
,IdentityHashMap
,LinkedHashMap
иProperties
. -
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 элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится. -
Объясните что такое
ConcurrentHashMap
? Как оно работает?Взято с официальной dokumentierenации:
Реализация словаря völlig поддерживающая многопоточное добавление/удаление/поиск элементов. Данный класс следует тем же спецификациям что иHashtable
, и содержит методы соответствующие методамHashtable
. Однако, хотя все операции являются потокобезопасными, операция по выборке элементов не блокирует таблицу, и вообще нет возможности запретить весь доступ к таблице. Этот класс совместим сHashtable
во всем кроме вопросов многопоточной синхронизации. -
Как работает
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у ключа. Больше информации можете получить по ссылке в начале ответа.
-
Как создать хороший ключ для словаря?
Следующий хороший вопрос, который обычно задают следом за вопросом о функционировании
HashMap
. Итак, главное ограничение — ключ должен быть таким, чтобы потом по нему можно было получить из словаря Bedeutung. Иначе в его использовании просто нет смысла. Если вы понимаете Wie функционируетhashmap
, вы знаете что его работа сильно зависит от методовhashCode()
иequals()
ein Objektов-ключей.hashCode
Wie aus dem oben Gesagten hervorgeht, sollte ein guter Schlüssel immer wieder denselben Schlüssel liefern , egal wie oft er angefordert wird. Außerdemequals()
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 .
-
Welche Inhaltsansichten bietet die Schnittstelle
Map
?Die Schnittstelle
Map
bietet 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.
-
Wann sollten Sie es verwenden
HashMap
und wann sollten Sie es verwendenTreeMap
?HashMap
Dies 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.TreeMap
Das ist eine besondere SorteHashMap
. Der Unterschied besteht darin, dass die SchlüsselTreeMap
geordnet aufbewahrt werden. Der Standardwert ist „natürliche Sortierung“. Sie können die Sortierung überschreiben, indem Sie eine Instanz der Klasse bereitstellenComparator
, deren Methodecompare
zum 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 aufrufenClassCastException
undk1
imk2
Wö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 sindInteger
),put(Object key, Object value)
sollte die Methode aufrufenClassCastException
.
GO TO FULL VERSION