JavaRush /جاوا بلاگ /Random-UR /جاوا میں کلیکشن کلاسز پر اکثر پوچھے جانے والے انٹرویو کے ...
theGrass
سطح
Саратов

جاوا میں کلیکشن کلاسز پر اکثر پوچھے جانے والے انٹرویو کے سوالات (حصہ 1)

گروپ میں شائع ہوا۔
بلا شبہ، جاوا میں جمع کرنا ایک بہت اہم شعبہ ہے، اور نئے اور تجربہ کار پروگرامرز دونوں کے انٹرویوز میں جمع کرنے کے بارے میں سوالات پوچھے جائیں گے۔ موضوع اتنا وسیع ہے کہ اس کا مکمل احاطہ کرنا تقریباً ناممکن ہے۔ پھر بھی، اپنے پچھلے انٹرویوز کی بنیاد پر، میں زیادہ سے زیادہ اچھے سوالات کی فہرست بنانے کی کوشش کروں گا جن کے لیے آپ کو تیار رہنا چاہیے۔ جاوا میں کلیکشن کلاسز پر اکثر پوچھے گئے انٹرویو کے سوالات (حصہ 1) - 1سوالات پیچیدہ اور آسان دونوں ہوں گے، لہذا اگر سوال آپ کو بہت قدیم لگتا ہے، تو یہ نہ بھولیں کہ یہ کم تجربہ کار پروگرامر کے لیے بہترین ہے۔

اس مضمون میں سوالات:

عمومی مسائل
  1. جاوا میں مجموعے کیا ہیں؟ ان کے فوائد کی فہرست بنائیں
  2. ہمیں مجموعہ کے درجہ بندی کے بارے میں بتائیں
  3. مجموعے انٹرفیس کا وارث کیوں نہیں ہوتے ہیں Cloneableاور Serializable؟
  4. Mapانٹرفیس انٹرفیس کا وارث کیوں نہیں ہوتا Collection؟
فہرستوں کے بارے میں سوالات
  1. ہم فہرستیں کیوں استعمال کرتے ہیں؟ کون سی اہم کلاسیں انٹرفیس کو نافذ کرتی ہیں List؟
  2. سٹرنگز کی ایک صف کو کیسے تبدیل کریں ArrayList؟
  3. فہرست کو الٹ ترتیب میں کیسے ترتیب دیا جائے؟
سیٹ کے بارے میں سوالات
  1. ہم سیٹ کیوں استعمال کرتے ہیں؟ کون سی اہم کلاسیں انٹرفیس کو نافذ کرتی ہیں Set؟
  2. عناصر کو کیسے ذخیرہ کیا جاتا ہے HashSet؟
  3. کیا کسی عنصر کو nullشامل کیا جا سکتا ہے TreeSetیا HashSet؟
لغات کے بارے میں سوالات
  1. ہم لغات کیوں استعمال کرتے ہیں؟ کون سی اہم کلاسیں انٹرفیس کو نافذ کرتی ہیں Map؟
  2. کیا ہے IdentityHashMapاور WeakHashMap؟
  3. وضاحت کریں کہ یہ کیا ہے ConcurrentHashMap؟ یہ کیسے کام کرتا ہے؟
  4. لغات کیسے کام کرتی ہیں؟
  5. ایک اچھی لغت کی کلید کیسے بنائی جائے؟
  6. انٹرفیس کون سے مواد کے نظارے فراہم کرتا ہے Map؟
  7. آپ اسے کب استعمال کریں HashMapاور کب استعمال کریں TreeMap؟
مختلف مجموعوں کے درمیان فرق کے بارے میں سوالات
  1. Setاور کے درمیان کیا فرق ہے List؟
  2. Listاور کے درمیان کیا فرق ہے Map؟
  3. HashMapاور کے درمیان فرق کو نام دیں۔HashTable?
  4. Vectorاور کے درمیان کیا فرق ہے ArrayList؟
  5. Iteratorاور کے درمیان کیا فرق ہے Enumeration؟
  6. HashMapاور کے درمیان کیا فرق ہے HashSet؟
  7. Iteratorاور کے درمیان کیا فرق ہے ListIterator؟
  8. TreeSetاور کے درمیان کیا فرق ہے SortedSet؟
  9. ArrayListاور کے درمیان کیا فرق ہے LinkedList؟
اور مزید سوالات
  1. صرف پڑھنے کے لیے مجموعہ کیسے بنایا جائے؟
  2. تھریڈ سیف کلیکشن کیسے بنایا جائے؟
  3. Iterator.add()ایک مجموعہ میں عناصر کو شامل کرنے کا کوئی طریقہ کیوں نہیں ہے ؟
  4. فہرست کے عناصر پر تکرار کرنے کے کیا طریقے ہیں؟
  5. آپ کام کرنے کے لئے تکرار کرنے والے کی خاصیت کو کیسے سمجھتے ہیں fail-fast؟
  6. fail-fastاور میں کیا فرق ہے fail-safe؟
  7. ConcurrentModificationExceptionایک مجموعہ کے ذریعے تکرار کرتے وقت کیسے بچیں ؟
  8. کیا ہوا UnsupportedOperationException؟
  9. کون سی کلیکشن کلاسز کسی بھی عنصر تک رسائی فراہم کرتی ہیں؟
  10. کیا ہوا BlockingQueue؟
  11. قطار اور اسٹیک کیا ہے، ان کے درمیان فرق درج کریں؟
  12. انٹرفیس Comparableاور کیا ہیں Comparator؟
  13. کلاسز کیا ہیں Collectionsاور Arrays؟
  14. استعمال شدہ لٹریچر کی فہرست
کوئی وقت ضائع کیے بغیر، آئیے وضاحت کے ساتھ شروع کرتے ہیں۔

عمومی مسائل

  1. جاوا میں مجموعے کیا ہیں؟ ان کے فوائد کی فہرست؟

    По определению — коллекция это an object представляющий собой группу an objectов. Как в теории множеств — множество это группа an objectов. Просто, не так ли? До выхода JDK 1.2, существовали классы такие How Vector и HashTable, но не было фреймворка Collection. Потом было решено добавить поддержку многократно используемых структур данных. Данный фреймворк был разработан преимущественно Джошуа Блохом, и впервые появился в JDK 1.2.

    В качестве главных преимуществ мы можем перечислить:

    • Уменьшаются затраты времени на написание codeа
    • Улучшается производительность, благодаря использованию высокоэффективных алгоритмов и структур данных
    • Коллекции являются универсальным способом хранения и передачи данных, что упрощает взаимодействие разных частей codeа
    • Простота в изучении, потому что необходимо выучить только самые верхние интерфейсы и поддерживаемые операции
  2. Расскажите про иерархию коллекций?

    جاوا میں کلیکشن کلاسز پر اکثر پوچھے گئے انٹرویو کے سوالات (حصہ 1) - 2

    Как показано на картинке, фреймворк коллекций содержит один интерфейс верхнего уровня — Collection, от которого наследуются Set, List и Queue. Ниже мы рассмотрим еще множество классов, содержащихся в этих трех ветвях. Запомните заголовок интерфейса Collection, это поможет вам с многими вопросами.

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

    Также фреймворк содержит интерфейс Map, который не является наследником интерфейса Collection. Причину почему он не наследует Collection, мы разберем в четвертом вопросе.

  3. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?

    Ну, простейший ответ — "потому что не надо". Функционал предоставляемый интерфейсами Cloneable и Serializable просто не нужен для коллекций.

    Еще одна причина — далеко не всегда нужен подкласс Cloneable потому что каждая операция клонирования потребляет очень много памяти, и неопытные программисты могут расходовать ее сами не понимая последствий.

    И последняя причина — клонирование и сериализация являются очень узкоспецифичными операциями, и реализовывать их нужно только когда это необходимо. Многие классы коллекции реализуют данные интерфейсы, но совершенно незачем закладывать их для всех коллекций вообще. Если вам нужно клонирование и сериализация - просто воспользуйтесь теми классами где она есть, если нет — остальными классами.

  4. Почему интерфейс Map не наследует интерфейс Collection?

    Хороший ответ на этот вопрос — "потому что они несовместимы". В интерфейсе Collection описан метод add(Object o).

    Словари не могут содержать этот метод, потому что работают с парами ключ/meaning. Также, словари имеют представления keySet, 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 и он позволяет проводить над ними многие операции.

    TreeMapیہ ایک خاص قسم ہے HashMap. فرق یہ ہے کہ چابیاں TreeMapمنظم طریقے سے محفوظ کی جاتی ہیں۔ پہلے سے طے شدہ "قدرتی چھانٹی" ہے۔ آپ کلاس کی ایک مثال فراہم کرکے ترتیب کو اوور رائڈ کر سکتے ہیں Comparator، جس کا طریقہ compareچابیاں ترتیب دینے کے لیے استعمال کیا جائے گا۔

    براہ کرم نوٹ کریں کہ لغت میں شامل تمام کلیدوں کو انٹرفیس کو نافذ کرنا ہوگا Comparable(چھانٹنے کے لیے یہ ضروری ہے)۔ مزید برآں، تمام چابیاں باہمی مطابقت پذیر ہونی چاہئیں: کسی کے لیے k1.compareTo(k2)کال نہیں کرنی چاہیے اور لغت میں محفوظ ہونی چاہیے۔ اگر صارف لغت میں ایک کلید ڈالنے کی کوشش کرتا ہے جو اس شرط کی خلاف ورزی کرتی ہے (مثال کے طور پر، لغت میں ایک سٹرنگ کلید جہاں تمام کلیدیں قسم کی ہوتی ہیں )، طریقہ کو کال کرنا چاہیے ۔ClassCastExceptionk1k2Integerput(Object key, Object value)ClassCastException

اصل آرٹیکل
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION