JavaRush /Java Blog /Random-ID /Pertanyaan Wawancara yang Sering Diajukan pada Kelas Kole...
theGrass
Level 24
Саратов

Pertanyaan Wawancara yang Sering Diajukan pada Kelas Koleksi di Java (Bagian 1)

Dipublikasikan di grup Random-ID
Tidak diragukan lagi, koleksi di Java adalah area yang sangat penting, dan pertanyaan tentang koleksi akan ditanyakan dalam wawancara baik untuk programmer baru maupun berpengalaman. Topiknya sangat luas sehingga hampir mustahil untuk membahasnya secara keseluruhan. Namun, berdasarkan wawancara saya sebelumnya, saya akan mencoba membuat daftar sebanyak mungkin pertanyaan BAIK yang harus Anda persiapkan. Pertanyaan Wawancara yang Sering Diajukan pada Kelas Koleksi di Java (Bagian 1) - 1Pertanyaannya akan rumit dan sederhana, jadi jika pertanyaan tersebut tampak terlalu primitif bagi Anda, jangan lupa bahwa pertanyaan tersebut sangat cocok untuk programmer yang kurang berpengalaman.

Pertanyaan dalam artikel ini:

Masalah umum
  1. Apa itu koleksi di Jawa? Sebutkan kelebihannya
  2. Beritahu kami tentang hierarki koleksi
  3. Mengapa koleksi tidak mewarisi antarmuka Cloneabledan Serializable?
  4. Mengapa Mapantarmuka tidak mewarisi antarmuka Collection?
Pertanyaan tentang daftar
  1. Mengapa kami menggunakan daftar? Kelas utama apa yang mengimplementasikan antarmuka List?
  2. Bagaimana cara mengubah array string menjadi ArrayList?
  3. Bagaimana cara mengurutkan daftar dalam urutan terbalik?
Pertanyaan tentang set
  1. Mengapa kami menggunakan set? Kelas utama apa yang mengimplementasikan antarmuka Set?
  2. Bagaimana elemen disimpan di HashSet?
  3. Bisakah suatu elemen nullditambahkan ke TreeSetor HashSet?
Pertanyaan tentang kamus
  1. Mengapa kami menggunakan kamus? Kelas utama apa yang mengimplementasikan antarmuka Map?
  2. Apa itu IdentityHashMapdan WeakHashMap?
  3. Jelaskan apa ini ConcurrentHashMap? Bagaimana cara kerjanya?
  4. Bagaimana cara kerja kamus?
  5. Bagaimana cara membuat kunci kamus yang baik?
  6. Tampilan konten apa yang disediakan antarmuka Map?
  7. Kapan Anda harus menggunakannya HashMapdan kapan Anda harus menggunakannya TreeMap?
Pertanyaan tentang perbedaan antara koleksi yang berbeda
  1. Apa perbedaan antara Setdan List?
  2. Apa perbedaan antara Listdan Map?
  3. Sebutkan perbedaan antara HashMapdanHashTable?
  4. Apa perbedaan antara Vectordan ArrayList?
  5. Apa perbedaan antara Iteratordan Enumeration?
  6. Apa perbedaan antara HashMapdan HashSet?
  7. Apa perbedaan antara Iteratordan ListIterator?
  8. Apa perbedaan antara TreeSetdan SortedSet?
  9. Apa perbedaan antara ArrayListdan LinkedList?
Dan lebih banyak pertanyaan
  1. Bagaimana cara membuat koleksi menjadi hanya-baca?
  2. Bagaimana cara membuat koleksi yang aman untuk thread?
  3. Mengapa tidak ada metode Iterator.add()untuk menambahkan elemen ke koleksi?
  4. Apa cara yang ada untuk mengulangi elemen daftar?
  5. Bagaimana Anda memahami properti iterator agar berfungsi fail-fast?
  6. Apa perbedaan antara fail-fastdan fail-safe?
  7. Bagaimana cara menghindari ConcurrentModificationExceptionsaat mengulangi koleksi?
  8. Apa yang terjadi UnsupportedOperationException?
  9. Kelas koleksi manakah yang memberikan akses ke elemen apa pun?
  10. Apa yang terjadi BlockingQueue?
  11. Apa itu antrian dan tumpukan, sebutkan perbedaannya?
  12. Apa itu antarmuka Comparabledan Comparator?
  13. Apa itu kelas Collectionsdan Arrays?
  14. Daftar literatur bekas
Tanpa membuang waktu lagi, mari kita mulai dengan penjelasannya.

Masalah umum

  1. Apa itu koleksi di Jawa? Sebutkan kelebihannya?

    Secara definisi, koleksi adalah suatu objek yang merupakan sekelompok objek. Seperti dalam teori himpunan, himpunan adalah sekelompok benda. Sederhana, bukan? Sebelum JDK 1.2, ada kelas seperti Vectordan HashTable, tetapi tidak ada kerangka kerja Collection. Kemudian diputuskan untuk menambahkan dukungan untuk struktur data yang dapat digunakan kembali. Kerangka kerja ini dikembangkan terutama oleh Joshua Bloch, dan pertama kali muncul di JDK 1.2.

    Kami dapat membuat daftar keuntungan utama:

    • Mengurangi waktu yang dihabiskan untuk menulis kode
    • Peningkatan kinerja melalui penggunaan algoritma dan struktur data yang sangat efisien
    • Koleksi adalah cara universal untuk menyimpan dan mentransfer data, yang menyederhanakan interaksi berbagai bagian kode
    • Mudah dipelajari karena hanya antarmuka paling atas dan pengoperasian yang didukung yang perlu dipelajari
  2. Ceritakan kepada kami tentang hierarki koleksi?

    Pertanyaan Wawancara yang Sering Diajukan pada Kelas Koleksi di Java (Bagian 1) - 2

    Seperti yang ditunjukkan dalam gambar, kerangka koleksi berisi satu antarmuka tingkat atas - Collection, yang darinya Set, Listdan diwarisi Queue. Di bawah ini kita akan melihat lebih banyak kelas yang terdapat dalam ketiga cabang ini. Ingat judul antarmuka Collection, ini akan membantu Anda dengan banyak pertanyaan.

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

    Kerangka kerja ini juga berisi antarmuka Peta , yang bukan merupakan turunan dari Collection. Kita akan melihat alasan mengapa dia tidak mendapat warisan Collectionpada pertanyaan keempat.

  3. Mengapa koleksi tidak mewarisi antarmuka Cloneabledan Serializable?

    Jawaban paling sederhana adalah “karena itu tidak perlu.” Fungsionalitasnya disediakan oleh antarmuka Cloneabledan Serializabletidak diperlukan untuk koleksi.

    Alasan lainnya adalah subkelas tidak selalu diperlukan Cloneablekarena setiap operasi kloning menghabiskan banyak memori, dan pemrogram yang tidak berpengalaman dapat menyia-nyiakannya tanpa memahami konsekuensinya.

    Dan alasan terakhir adalah kloning dan serialisasi adalah operasi yang sangat spesifik, dan harus diterapkan hanya jika diperlukan. Banyak kelas koleksi yang mengimplementasikan antarmuka ini, tetapi sama sekali tidak perlu mengimplementasikannya untuk semua koleksi secara umum. Jika Anda memerlukan kloning dan serialisasi, gunakan saja kelas-kelas yang ada, jika tidak, gunakan kelas-kelas yang tersisa.

  4. Mengapa Mapantarmuka tidak mewarisi antarmuka Collection?

    Jawaban yang bagus untuk pertanyaan ini adalah “karena keduanya tidak kompatibel.” Antarmuka Collectionmenjelaskan metodenya add(Object o).

    Kamus tidak dapat memuat metode ini karena bekerja dengan pasangan kunci/nilai. Selain itu, kamus memiliki representasi keySetyang valueSet,tidak ada dalam koleksi.

    Karena perbedaan ini, antarmuka Maptidak dapat mewarisi antarmuka Collection, dan merupakan cabang hierarki yang terpisah.

Pertanyaan tentang daftar

  1. Mengapa kami menggunakan daftar? Kelas utama apa yang mengimplementasikan antarmuka List?

    Daftar di Java adalah kumpulan elemen yang diurutkan. Setiap elemen memiliki indeks yang dimulai dari nol. Semua indeks bersifat unik. Selain metode yang dijelaskan di antarmuka Collection, daftar memiliki metodenya sendiri, terutama untuk bekerja dengan elemen koleksi berdasarkan indeksnya. Anda dapat membagi metode ini menjadi 3 grup - mencari elemen, mendapatkan elemen tertentu, mengulangi koleksi, dan memilih subgrup. Semua operasi ini dapat dilakukan dengan indeks elemen.

    Kelas utama yang mengimplementasikan antarmuka Listadalah Stack, Vector, ArrayListdan LinkedList. Untuk informasi lebih rinci tentangnya, silakan merujuk ke dokumentasi.

  2. Bagaimana cara mengubah array string menjadi ArrayList?

    Pertanyaan ini agak lebih dalam dari sekedar pemrograman, seperti yang terlihat bagi pemula. Tujuannya adalah untuk menguji pengetahuan kandidat tentang kelas utilitas kerangka kerja Collection. Mari kita pertimbangkan dua kelas yang paling diminati selama wawancara - Collectionsdan Arrays.

    Kelas Collectionsmenyediakan metode statis untuk operasi pada koleksi. Oleh karena itu, Arraysia menyediakan metode statis untuk operasi pada array.

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

    Saya juga ingin mencatat bahwa metode ini tidak hanya mampu memproses string, tetapi juga akan membuat daftar elemen jenis apa pun yang berisi array.

    Integer[] nums = {1, 2, 3, 4};
    List numList = Arrays.asList(nums);
  3. Bagaimana cara mengurutkan daftar dalam urutan terbalik?

    Seperti pertanyaan sebelumnya, pertanyaan ini menguji pengetahuan Anda tentang kelas utilitas.Collection

    List reversedList = Collections.reverse(list);

Pertanyaan tentang set

  1. Mengapa kami menggunakan set? Kelas utama apa yang mengimplementasikan antarmuka 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ов-ключей.

    Sebagai berikut dari penjelasan di atas, kunci yang baik harus memberikan kunci yang sama hashCodeberulang kali, tidak peduli berapa kali diminta. Dan juga, kunci yang identik equals()harus mengembalikan nilai true saat memanggil suatu metode, dan kunci yang berbeda harus mengembalikan nilai salah.

    Oleh karena itu, kandidat terbaik untuk peran kunci adalah kelas yang tidak dapat diubah.

    Anda dapat membaca lebih lanjut di .

  6. Tampilan konten apa yang disediakan antarmuka Map?

    Antarmuka Mapmenyediakan tiga tampilan data yang disimpan:

    • kumpulan semua kunci
    • kumpulan semua nilai
    • sekumpulan objek Entryyang berisi kunci dan nilai

    Anda dapat menavigasinya menggunakan iterator.

  7. Kapan Anda harus menggunakannya HashMapdan kapan Anda harus menggunakannya TreeMap?

    HashMapini adalah kelas yang sangat banyak digunakan dan Anda mengetahuinya. Jadi, saya akan membatasi diri untuk mengatakan bahwa ini menyimpan pasangan kunci/nilai dan memungkinkan Anda melakukan banyak operasi pada pasangan tersebut.

    TreeMapini adalah variasi khusus HashMap. Bedanya, kuncinya TreeMapdisimpan secara tertib. Standarnya adalah "penyortiran alami". Anda dapat mengganti penyortiran dengan memberikan instance kelas Comparator, yang metodenya compareakan digunakan untuk mengurutkan kunci.

    Harap dicatat bahwa semua kunci yang ditambahkan ke kamus harus mengimplementasikan antarmuka Comparable(ini diperlukan untuk penyortiran). Selain itu, semua kunci harus kompatibel satu sama lain: k1.compareTo(k2)tidak boleh dipanggil ClassCastExceptiondan k1disimpan k2dalam kamus. Jika pengguna mencoba memasukkan kunci ke dalam kamus yang melanggar ketentuan ini (misalnya, kunci string ke dalam kamus yang semua kuncinya bertipe Integer), metode put(Object key, Object value)harus memanggil ClassCastException.

Artikel asli
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION