JavaRush /Java Blog /Random-TK /Java-da ýygyndy synplary barada ýygy-ýygydan soralýan söh...
theGrass
Dereje
Саратов

Java-da ýygyndy synplary barada ýygy-ýygydan soralýan söhbetdeşlik soraglary (1-nji bölüm)

Toparda çap edildi
Şübhesiz, Java-daky kolleksiýalar örän möhüm ugur bolup, täze we tejribeli programmistler üçin geçirilen söhbetdeşliklerde kolleksiýalar barada soraglar berler. Mowzuk şeýle bir giň welin, ony doly ýapmak mümkin däl diýen ýaly. Şeýle-de bolsa, öňki söhbetdeşliklerime esaslanyp, mümkin boldugyça köp gowy soraglary sanamaga synanyşaryn. Java-da ýygyndy synplary barada ýygy-ýygydan soralýan söhbetdeşlik soraglary (1-nji bölüm) - 1Soraglar çylşyrymly we ýönekeý bolar, şonuň üçin bu sorag size gaty ýönekeý görünýän bolsa, tejribesiz programmist üçin ajaýypdygyny ýatdan çykarmaň.

Bu makaladaky soraglar:

Umumy meseleler
  1. Java-da kolleksiýalar näme? Olaryň artykmaçlyklaryny sanaň
  2. Kolleksiýa iýerarhiýasy barada bize aýdyň
  3. Näme üçin kolleksiýalar interfeýsleri miras almaýar Cloneablewe Serializable?
  4. Näme üçin Mapinterfeýs interfeýsi miras almaýar Collection?
Sanawlar barada soraglar
  1. Näme üçin sanawlary ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler List?
  2. Setirleriň toplumyny nädip öwürmeli ArrayList?
  3. Sanawy ters tertipde nädip tertipleşdirmeli?
Toplumlar barada soraglar
  1. Näme üçin toplumlary ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler Set?
  2. Elementler nähili saklanýar HashSet?
  3. Bir element nullgoşup bolarmy TreeSetýa-da HashSet?
Sözlükler hakda soraglar
  1. Näme üçin sözlük ulanýarys? Haýsy esasy synplar interfeýsi durmuşa geçirýärler Map?
  2. Näme IdentityHashMapwe WeakHashMap?
  3. Munuň nämedigini düşündiriň ConcurrentHashMap? Bu nähili işleýär?
  4. Sözlükler nähili işleýär?
  5. Gowy sözlük açaryny nädip döretmeli?
  6. Interfeýs haýsy mazmuny görkezýär Map?
  7. Haçan ulanmaly HashMapwe haçan ulanmaly TreeMap?
Dürli ýygyndylaryň arasyndaky tapawutlar barada soraglar
  1. SetArasynda näme tapawutlar bar List?
  2. ListArasynda näme tapawutlar bar Map?
  3. HashMapWe arasyndaky tapawudyň adyny aýdyňHashTable?
  4. VectorArasynda näme tapawutlar bar ArrayList?
  5. IteratorArasynda näme tapawutlar bar Enumeration?
  6. HashMapArasynda näme tapawutlar bar HashSet?
  7. IteratorArasynda näme tapawutlar bar ListIterator?
  8. TreeSetArasynda näme tapawutlar bar SortedSet?
  9. ArrayListArasynda näme tapawutlar bar LinkedList?
Has köp sorag
  1. Kolleksiýany diňe okamak üçin nädip etmeli?
  2. Sapdan howpsuz kolleksiýa nädip etmeli?
  3. Iterator.add()Näme üçin kolleksiýa elementleri goşmagyň usuly ýok ?
  4. Sanawyň elementleriniň üstünde gaýtalamagyň haýsy ýollary bar?
  5. Işlemek üçin iterator häsiýetine nähili düşünýärsiňiz fail-fast?
  6. fail-fastArasynda näme tapawut bar fail-safe?
  7. ConcurrentModificationExceptionCollectionygyndy arkaly gaýtalananda nädip saklanmaly ?
  8. Name boldy UnsupportedOperationException?
  9. Haýsy kolleksiýa sapaklary haýsydyr bir elemente girmäge mümkinçilik berýär?
  10. Name boldy BlockingQueue?
  11. Bir nobat we stak näme, olaryň arasyndaky tapawutlary sanaň?
  12. Interfeýsler näme Comparablewe Comparator?
  13. Sapaklar näme Collectionswe Arrays?
  14. Ulanylan edebiýatyň sanawy
Wagt ýitirmän, düşündirişlerden başlalyň.

Umumy meseleler

  1. 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? VectorJDK 1.2-den öň we ýaly sapaklar bardy HashTable, ýöne çarçuwasy ýokdy Collection. 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
  2. Kolleksiýalaryň iýerarhiýasy barada bize aýdyň?

    Java-da ýygyndy synplary barada ýygy-ýygydan soralýan söhbetdeşlik soraglary (1-nji bölüm) - 2

    Suratda görkezilişi ýaly, kolleksiýa çarçuwasynda bir ýokary derejeli interfeýs bar - ondan Collectionmiras 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.SetListQueueCollection

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

    Çarçuwada , nesli bolmadyk Karta interfeýsiCollection hem bar . CollectionDördünji soragda onuň miras almazlygynyň sebäbine serederis.

  3. Näme üçin kolleksiýalar interfeýsleri miras almaýar Cloneablewe Serializable?

    Iň ýönekeý jogap "sebäbi zerur däl". Funksiýa interfeýsler bilen üpjün edilýär Cloneablewe Serializableý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ň.

  4. Näme üçin Mapinterfeýs interfeýsi miras almaýar Collection?

    Bu soraga gowy jogap "sebäbi biri-birine gabat gelmeýär". Interfeýs Collectionusuly beýan edýär add(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, и представляет собой отдельную ветвь иерархии.

Вопросы про списки

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

    Списки в Java это упорядоченная коллекция элементов. Каждый элемент имеет индекс, начинающийся с нуля. Все индексы уникальны. Кроме методов описанных в интерфейсе Collection, списки имеют свои собственные методы, в основном для работы с elementми коллекциями по их индексу. Можно разделить эти методы на 3 группы — поиск element, получение конкретного element, перебор коллекции и выборка подгруппы. Все эти операции могут производиться по индексу element.

    Основные классы, реализующие интерфейс List это Stack, Vector, ArrayList и LinkedList. За более подробной информацией по ним, обратитесь к documentации.

  2. Как преобразовать массив строк в 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);
  3. Как отсортировать список в обратном порядке?

    Как и предыдущий, этот вопрос проверяет ваше знание служебных классов Collection

    List reversedList = Collections.reverse(list);

Вопросы про множества

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Как следует из вышеизложенного, хороший ключ должен давать один и тот же hashCode снова и снова, независимо от того сколько раз он запрашивается. А также, одинаковые ключи, при вызове метода equals() должны возвращать true, а разные — false.

    Из чего следует, что лучшими кандидатами на роль ключа являются неизменяемые классы.

    Можете почитать еще по addressу.

  6. Какие представления содержимого предоставляет интерфейс Map?

    Интерфейс Map предоставляет три представления хранящихся данных:

    • множество всех ключей
    • множество всех значений
    • множество an objectов Entry, содержащих в себе и ключ и meaning

    Перемещаться по ним можно с помощью итераторов.

  7. Когда нужно использовать HashMap, а когда TreeMap?

    HashMap это очень широко используемый класс, и вы это знаете. Так что, я ограничусь тем, что скажу что в нем хранятся пары ключ/meaning и он позволяет проводить над ними многие операции.

    TreeMapbu aýratyn dürli HashMap. Tapawut, düwmeleriň TreeMaptertipli saklanmagydyr. Dymmaklyk "tebigy tertipleşdirmek". Düwmeleri tertiplemek üçin ulanyljak synpyň mysaly bilen tertipleşdirmegi ýok edip bilersiňiz Comparator.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 birini k1.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 .ClassCastExceptionk1k2Integerput(Object key, Object value)ClassCastException

Asyl makala
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION