Bu makaladaky soraglar:
Umumy meseleler- Java-da kolleksiýalar näme? Olaryň artykmaçlyklaryny sanaň
- Kolleksiýa iýerarhiýasy barada bize aýdyň
- Näme üçin kolleksiýalar interfeýsleri miras almaýar
Cloneable
weSerializable
? - Näme üçin
Map
interfeýs interfeýsi miras almaýarCollection
?
- Näme üçin sanawlary ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler
List
? - Setirleriň toplumyny nädip öwürmeli
ArrayList
? - Sanawy ters tertipde nädip tertipleşdirmeli?
- Näme üçin toplumlary ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler
Set
? - Elementler nähili saklanýar
HashSet
? - Bir element
null
goşup bolarmyTreeSet
ýa-daHashSet
?
- Näme üçin sözlük ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler
Map
? - Näme
IdentityHashMap
weWeakHashMap
? - Munuň nämedigini düşündiriň
ConcurrentHashMap
? Bu nähili işleýär? - Sözlükler nähili işleýär?
- Gowy sözlük açaryny nädip döretmeli?
- Interfeýs haýsy mazmuny görkezýär
Map
? - Haçan ulanmaly
HashMap
we haçan ulanmalyTreeMap
?
Set
Arasynda näme tapawutlar barList
?List
Arasynda näme tapawutlar barMap
?HashMap
We arasyndaky tapawudyň adyny aýdyňHashTable?
Vector
Arasynda näme tapawutlar barArrayList
?Iterator
Arasynda näme tapawutlar barEnumeration
?HashMap
Arasynda näme tapawutlar barHashSet
?Iterator
Arasynda näme tapawutlar barListIterator
?TreeSet
Arasynda näme tapawutlar barSortedSet
?ArrayList
Arasynda näme tapawutlar barLinkedList
?
- Kolleksiýany diňe okamak üçin nädip etmeli?
- Sapdan howpsuz kolleksiýa nädip etmeli?
Iterator.add()
Näme üçin kolleksiýa elementleri goşmagyň usuly ýok ?- Sanawyň elementleriniň üstünde gaýtalamagyň haýsy ýollary bar?
- Işlemek üçin iterator häsiýetine nähili düşünýärsiňiz
fail-fast
? fail-fast
Arasynda näme tapawut barfail-safe
?ConcurrentModificationException
Collectionygyndy arkaly gaýtalananda nädip saklanmaly ?- Name boldy
UnsupportedOperationException
? - Haýsy kolleksiýa sapaklary haýsydyr bir elemente girmäge mümkinçilik berýär?
- Name boldy
BlockingQueue
? - Bir nobat we stak näme, olaryň arasyndaky tapawutlary sanaň?
- Interfeýsler näme
Comparable
weComparator
? - Sapaklar näme
Collections
weArrays
? - Ulanylan edebiýatyň sanawy
Umumy meseleler
-
Java-da kolleksiýalar näme? Olaryň artykmaçlyklaryny sanaň?
Kesgitleme boýunça, ýygyndy obýektleriň toparydyr. Toplum teoriýasynda bolşy ýaly, toplum obýektleriň toparydyr. Pleönekeý, şeýlemi?
Vector
JDK 1.2-den öň we ýaly sapaklar bardyHashTable
, ýöne çarçuwasy ýokdyCollection
. Soňra gaýtadan ulanylýan maglumat gurluşlaryna goldaw goşmak kararyna gelindi. Bu gurluş esasan Joşua Bloch tarapyndan işlenip düzüldi we ilkinji gezek JDK 1.2-de peýda boldy.Esasy artykmaçlyklaryny sanap bileris:
- Kod ýazmak üçin sarp edilen wagty azaldar
- Örän täsirli algoritmleri we maglumat gurluşlaryny ulanmak arkaly öndürijiligi gowulandyrýar
- Kolleksiýalar, koduň dürli bölekleriniň täsirini aňsatlaşdyrýan maglumatlary saklamagyň we geçirmegiň ähliumumy usulydyr
- Öwrenmek aňsat, sebäbi diňe iň ýokary interfeýsler we goldanýan amallar öwrenilmeli
-
Kolleksiýalaryň iýerarhiýasy barada bize aýdyň?
Suratda görkezilişi ýaly, kolleksiýa çarçuwasynda bir ýokary derejeli interfeýs bar - ondan
Collection
miras galan . Aşakda bu üç şahada bar bolan başga-da köp synplara serederis. Interfeýsiň adyny ýadyňyzdan çykarmaň , size köp soraglar kömek eder.Set
List
Queue
Collection
public interface Collection extends Iterable { //описание методов }
Çarçuwada , nesli bolmadyk Karta interfeýsi
Collection
hem bar .Collection
Dördünji soragda onuň miras almazlygynyň sebäbine serederis. -
Näme üçin kolleksiýalar interfeýsleri miras almaýar
Cloneable
weSerializable
?Iň ýönekeý jogap "sebäbi zerur däl". Funksiýa interfeýsler bilen üpjün edilýär
Cloneable
weSerializable
ýygyndy üçin zerur däl.Anotherene bir sebäbi, kiçi klassyň hemişe zerurlygy ýok
Cloneable
, sebäbi her bir klonlaşdyryş amaly köp ýady sarp edýär we tejribesiz programmistler netijelerine düşünmän ony ýitirip bilerler.Iň soňky sebäbi bolsa, klonlaşdyrmak we seriallaşdyrmak gaty ýokary amallar we olar diňe zerur bolanda amala aşyrylmalydyr. Köp ýygnamak synplary bu interfeýsleri amala aşyrýarlar, ýöne umuman ähli kolleksiýalar üçin olary durmuşa geçirmegiň düýbünden zerurlygy ýok. Klonirlemek we seriallaşdyrmak gerek bolsa, şol synplary nirede bolsa ulanyň, ýok bolsa, galan synplary ulanyň.
-
Näme üçin
Map
interfeýs interfeýsi miras almaýarCollection
?Bu soraga gowy jogap "sebäbi biri-birine gabat gelmeýär". Interfeýs
Collection
usuly beýan edýäradd(Object o)
.Sözlüklerde bu usul bolup bilmez, sebäbi açar / baha jübütleri bilen işleýär. Şeýle hem, sözlüklerde ýygyndyda ýok
keySet
şekillendirişler bar.valueSet,
В связи с этими различиями, интерфейс
Map
не может наследовать интерфейсCollection
, и представляет собой отдельную ветвь иерархии.
Вопросы про списки
-
Почему мы используем списки? Какие основные классы реализуют интерфейс
List
?Списки в Java это упорядоченная коллекция элементов. Каждый элемент имеет индекс, начинающийся с нуля. Все индексы уникальны. Кроме методов описанных в интерфейсе
Collection
, списки имеют свои собственные методы, в основном для работы с elementми коллекциями по их индексу. Можно разделить эти методы на 3 группы — поиск element, получение конкретного element, перебор коллекции и выборка подгруппы. Все эти операции могут производиться по индексу element.Основные классы, реализующие интерфейс
List
этоStack
,Vector
,ArrayList
иLinkedList
. За более подробной информацией по ним, обратитесь к documentации. -
Как преобразовать массив строк в
ArrayList
?Вопрос этот несколько глубже чем просто по программированию, How это видится новичкам. Цель его — проверить знание кандидатом служебных классов фреймворка
Collection
. Рассмотрим два таких класса, наиболее востребованных на собеседованиях —Collections
иArrays
.Класс
Collections
предоставляет статические методы для операций над коллекциями. СоответственноArrays
предоставляет статические методы для операций над массивами.String[] words = {"аз", "буки", "веди", "глагол", "добро"}; //Как вы можете обратить внимание, у нас есть массив строк String[] words. //В котором у нас лежат 5 строк. List wordList = Arrays.asList(words); //легким движением руки, а точнее вызовом Arrays.asList() мы превратor наш //массив строк в список List wordList.
Также хотелось бы отметить, что этот метод способен обрабатывать не только строки, он создаст список элементов любого типа, которого был массив.
Integer[] nums = {1, 2, 3, 4}; List numList = Arrays.asList(nums);
-
Как отсортировать список в обратном порядке?
Как и предыдущий, этот вопрос проверяет ваше знание служебных классов
Collection
List reversedList = Collections.reverse(list);
Вопросы про множества
-
Почему мы используем множества? Какие основные классы реализуют интерфейс
Set
?Он моделирует математическое множество, из теории множеств. Интерфейс
Set
похож наList
, но имеет некоторые отличия. Первое — это не упорядоченная коллекция. Следовательно, добавление/удаление элементов не требует их сортировки. Главная особенность множеств - уникальность элементов, то есть один и тот же элемент не может содержаться в множестве дважды.Очень важными для функционирования множеств являются методы
equals()
иhashCode()
, они позволяют сравнивать множества разных классов. Два множества являются идентичными только если они содержат одни и те же элементы.Как следует из вышеизложенного, множества не поддерживают операций основанных на индексе element, How списки. Множества имеют только те методы которые описаны в интерфейсе
Collection
Основными классами, реализующими интерфейс
Set
, являютсяEnumSet
,HashSet
,LinkedHashSet
иTreeSet
. Если хотите узнать больше — почитайте соответствующие разделы documentации Java. -
Как хранятся элементы в
HashSet
?Как вы уже в курсе,
HashMap
хранит пары ключ/meaning, и ключи должны быть уникальны.HashSet
использует эту особенностьHashMap
для обеспечения уникальности своих элементов. В классеHashSet
, словарь описан следующим образом:private transient HashMap<E, Object> map; private static final Object PRESENT = new Object();
Итак, когда вы сохраняете элемент в множестве, оно кладет данный элемент в качестве ключа в словарь, а meaningм идет an object PRESENT, How это описано ниже:
public boolean add(E e) { return map.put(e, PRESENT) == null; }
Я настоятельно рекомендую вам прочесть эту статью, это поможет вам с легкостью ответить на все связанные с
HashMap
вопросы. -
Может ли элемент
null
быть добавлен вTreeSet
orHashSet
?Как видно из предыдущего ответа, в методе
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
?Словари — специальный тип коллекции, которая используется для хранения пар ключ/meaning. По этой причине он не является наследником интерфейса
Collection
. Словарь предоставляет методы для добавления пар ключ/meaning, удаления, поиска и перебора по предоставляемым словарем представлениям данных.Основные классы реализующие интерфейс
Map
:HashMap
,Hashtable
,EnumMap
,IdentityHashMap
,LinkedHashMap
иProperties
. -
What такое
IdentityHashMap
иWeakHashMap
?IdentityHashMap
похож наHashMap
за одним исключением — для сравнения an objectов используется сравнение указателей на an objectы, если указатели не равны (указывают на an objectы лежащие по разным addressм), значит an objectы считаются различными.IdentityHashMap
является довольно редко используемым. Хотя он реализует интерфейсMap
, он нарушает один из основных принципов устройстваMap
, который требует использования методаequals()
для сравнения an objectов.IdentityHashMap
используется только в тех случаях, когда требуется сравнение an objectов по их addressм.WeakHashMap
это реализация интерфейсаMap
, которая содержит слабые ссылки на элементы. То есть, если за пределамиWeakHashMap
не осталось ни одной ссылки на его элемент, этот элемент удаляется сборщиком мусора. Класс предназначен для использования с an objectми, у которых методequals()
проверяет идентичность an objectов с помощью оператора==
. После того How элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится. -
Объясните что такое
ConcurrentHashMap
? Как оно работает?Взято с официальной documentации:
Реализация словаря fully поддерживающая многопоточное добавление/удаление/поиск элементов. Данный класс следует тем же спецификациям что иHashtable
, и содержит методы соответствующие методамHashtable
. Однако, хотя все операции являются потокобезопасными, операция по выборке элементов не блокирует таблицу, и вообще нет возможности запретить весь доступ к таблице. Этот класс совместим сHashtable
во всем кроме вопросов многопоточной синхронизации. -
Как работает
hashmap
?Самый важный вопрос, который скорее всего будет задан на собеседовании программисту любого уровня. Вы должны хорошо разбираться в этой теме, и не только потому что это самый задаваемый вопрос, но и потому что понимание устройства
hashmap
позволяет вам легче разобраться в других особенностях работы коллекций.Ответ на этот вопрос очень обширный, и fully его можно прочесть в этой статье — How работает hashmap. А на данный момент просто запомните что
HashMap
работает на основе хэширования. Словарь, по определению, это an object который связывает ключи и значения. Для хранения таких структур, он использует внутренний классEntry
.static class Entry implements Map.Entry { final K key; V value; Entry next; final int hash; ...//Еще много codeа тут }
Переменные
key
иvalue
служат для хранения ключа и значения. А сами an objectыEntry
лежат в массиве./** * Размер таблицы меняется по необходимости, * и обязательно должен быть equals степени двойки */ transient Entry[] table;
Индекс нужного element в массиве вычисляется по хэш-codeу ключа. Больше информации можете получить по ссылке в начале ответа.
-
Как создать хороший ключ для словаря?
Следующий хороший вопрос, который обычно задают следом за вопросом о функционировании
HashMap
. Итак, главное ограничение — ключ должен быть таким, чтобы потом по нему можно было получить из словаря meaning. Иначе в его использовании просто нет смысла. Если вы понимаете How функционируетhashmap
, вы знаете что его работа сильно зависит от методовhashCode()
иequals()
an objectов-ключей.Как следует из вышеизложенного, хороший ключ должен давать один и тот же
hashCode
снова и снова, независимо от того сколько раз он запрашивается. А также, одинаковые ключи, при вызове методаequals()
должны возвращать true, а разные — false.Из чего следует, что лучшими кандидатами на роль ключа являются неизменяемые классы.
Можете почитать еще по addressу.
-
Какие представления содержимого предоставляет интерфейс
Map
?Интерфейс
Map
предоставляет три представления хранящихся данных:- множество всех ключей
- множество всех значений
- множество an objectов
Entry
, содержащих в себе и ключ и meaning
Перемещаться по ним можно с помощью итераторов.
-
Когда нужно использовать
HashMap
, а когдаTreeMap
?HashMap
это очень широко используемый класс, и вы это знаете. Так что, я ограничусь тем, что скажу что в нем хранятся пары ключ/meaning и он позволяет проводить над ними многие операции.TreeMap
bu aýratyn dürliHashMap
. Tapawut, düwmeleriňTreeMap
tertipli saklanmagydyr. Dymmaklyk "tebigy tertipleşdirmek". Düwmeleri tertiplemek üçin ulanyljak synpyň mysaly bilen tertipleşdirmegi ýok edip bilersiňizComparator
.compare
Sözlükde goşulan ähli düwmeleriň interfeýsi durmuşa geçirmelidigini ýadyňyzdan çykarmaň
Comparable
(bu tertiplemek üçin zerurdyr). Mundan başga-da, ähli düwmeler biri-birine gabat gelmeli: haýsydyr birinik1.compareTo(k2)
çagyrmaly däl we sözlükde saklamaly. Ulanyjy bu şerti bozýan sözlüge açar goýmaga synanyşsa (mysal üçin, ähli düwmeleriň görnüşi bolan sözlüge setir açary ), usul jaň etmeli .ClassCastException
k1
k2
Integer
put(Object key, Object value)
ClassCastException
GO TO FULL VERSION