У чому полягає принципова різниця між інтерфейсами Set<E>
та List<E>
інтерфейсами?
У чому полягає принципова різниця між інтерфейсами Set<E>
та List<E>
інтерфейсами?
Відповіді:
List
це впорядкована послідовність елементів, тоді Set
як це чіткий перелік елементів, який не має упорядкованості (дякую, Квінн Тейлор ).
Впорядкована колекція (також відома як послідовність). Користувач цього інтерфейсу має точний контроль над тим, куди в списку вставлений кожен елемент. Користувач може отримати доступ до елементів за допомогою їх цілого індексу (позиція в списку) та шукати елементи в списку.
Колекція, яка не містить дублікатів елементів. Більш формально, набори не містять пари елементів e1 і e2, таких, що e1.equals (e2), і не більше одного нульового елемента. Як випливає з назви, цей інтерфейс моделює математичну абстракцію.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Впорядковані списки елементів (унікальні чи ні)
Відповідність інтерфейсу Java під назвоюList
Можна отримати доступ за індексом
реалізовано за допомогою
Списки унікальних елементів:
Відповідають інтерфейс в Java з ім'ямSet
Можна НЕ звертатися за індексом
реалізовано за допомогою
Обидва інтерфейси Set
і List
відповідають інтервалу Java з назвоюCollection
Концептуально ми зазвичай посилаємось на не упорядковане групування, яке дозволяє дублікати як «Мішок» і не дозволяє дублікати - це набір.
Список
Встановити
List
s, як правило, дозволяють повторювати об'єкти.
List
s повинні бути впорядковані, а тому доступні за допомогою індексу.
Класи реалізації включають в себе: ArrayList
, LinkedList
,Vector
Set
s не дозволяють дублювати об'єкти. Більшість реалізацій є не упорядкованими, але це конкретно для впровадження.
Класи впровадження включають:
HashSet
(не
LinkedHashSet
упорядкований), TreeSet
(впорядкований ),
(упорядкований за природним замовленням або за допомогою наданого компаратора)
Як ми говоримо про інтерфейси Java, чому б не подивитися на Javadoc ?!
List
- це упорядкована колекція (послідовність), яка зазвичай дозволяє копіїSet
Колекція A - це збір, який не містить дублюючих елементів, порядок ітерації може бути гарантований реалізацієюНЕ згадується відсутність порядку щодо наборів: це залежить від реалізації.
LinkedHashSet
зліва, якщо код покладається на замовлення пізніше. Я використовую лише Set
те, що я справді використовую його як один, оскільки ви не можете припустити, що основна реалізація є такою LinkedHashSet
чи такою, це може бути вже сьогодні, але завтра код зміниться, і він вийде з ладу.
Це може бути не відповідь, яку ви шукаєте, але JavaDoc класів колекцій насправді досить описовий. Скопіювати / вставити:
Впорядкована колекція (також відома як послідовність). Користувач цього інтерфейсу має точний контроль над тим, куди в списку вставлений кожен елемент. Користувач може отримати доступ до елементів за допомогою їх цілого індексу (позиція в списку) та шукати елементи в списку.
На відміну від наборів, списки зазвичай дозволяють повторювати елементи. Більш формально, списки зазвичай дозволяють пари елементів e1 і e2, такі, що e1.equals (e2), і вони, як правило, дозволяють кілька нульових елементів, якщо вони взагалі дозволяють нульові елементи. Це немислимо, що хтось може захотіти реалізувати список, який забороняє дублікати, викидаючи винятки під час виконання, коли користувач намагається вставити їх, але ми очікуємо, що це використання буде рідкісним.
Набір - це не упорядкована група відмінних об'єктів - не допускаються повторювані об’єкти. Він, як правило, реалізується за допомогою хеш-коду вставлених об'єктів. (Конкретні реалізації можуть додавати замовлення, але сам інтерфейс Set не робить.)
Список - це упорядкована група об'єктів, яка може містити дублікати. Він може бути реалізований за допомогою ArrayList
, LinkedList
і т.д.
List
не наказується 😕
Список:
Список дозволяє повторювати елементи та нульові значення. Легкий пошук, використовуючи відповідний індекс елементів, а також він буде відображати елементи в порядку вставки. Приклад: (пов'язаний список)
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l=new LinkedList<Integer>();
l.add(001);
l.add(555);
l.add(333);
l.add(888);
l.add(555);
l.add(null);
l.add(null);
Iterator<Integer> il=l.iterator();
System.out.println(l.get(0));
while(il.hasNext()){
System.out.println(il.next());
}
for(Integer str : l){
System.out.println("Value:"+str);
}
}
}
Вихід:
1
1
555
333
888
555
null
null
Значення: 1
Значення: 555
Значення: 333
Значення: 888
Значення: 555
Значення: null
Значення: null
Встановити:
Встановити не дозволяється жодних повторюваних елементів, і це дозволить отримати одне нульове значення. Він не підтримуватиме жодного порядку для відображення елементів. Тільки TreeSet
відображатиметься у порядку зростання.
Приклад: (TreeSet)
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> set = new TreeSet<String>();
try {
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");
for (String num : set) {
System.out.println( num);
}
set.add(null);
} catch (NullPointerException e) {
System.out.println(e);
System.out.println("Set doesn't allow null value and duplicate value");
}
}
}
Вихід:
весь
привіт
вітаю
світ
java.lang.NullPointerException
Набір не дозволяє нульове значення та дублювання значення
Список Vs Set
1) Набір не дозволяє дублікати. Список дозволяє дублювати. На основі реалізації Set, він також підтримує порядок вставки.
наприклад: LinkedHashSet
. Він підтримує установчі order.Please см натисніть тут
2) містить метод. За характером набору це забезпечить кращі показники доступу. У кращому випадку його o (1). Але у Списку є проблема з ефективністю, яку потрібно викликати contains
.
Усі List
класи підтримують порядок вставки. Вони використовують різні реалізації на основі продуктивності та інших характеристик (наприклад, ArrayList
для швидкості доступу до певного індексу, LinkedList
для простого порядку). Оскільки ключа немає, копії дозволені.
Ці Set
класи не підтримують порядок введення. Вони необов'язково можуть накладати певний порядок (як і у випадку SortedSet
), але зазвичай мають порядок, визначений реалізацією, заснований на деякій хеш-функції (як і у випадку HashSet
). Оскільки Set
доступ до s здійснюється за допомогою ключа, копії заборонені.
Замовлення ... у списку є замовлення, набір - ні.
Кілька приміток, гідних відмінностей між Список і Набором на Java, наведені нижче:
1) Принципова різниця між списком та набором у Java - це можливість створення повторюваних елементів. Список у Java дозволяє дублікати, тоді як Set не дозволяє дублікати. Якщо ви вставите дублікат у Set, він замінить старе значення. Будь-яка реалізація Set в Java містить лише унікальні елементи.
2) Ще одна суттєва відмінність між List і Set в Java - це порядок. Список - це упорядкована колекція, тоді як Set - це не упорядкована колекція. Список підтримує порядок вставки елементів, тобто будь-який елемент, який вставляється раніше, буде переходити на нижчий показник, ніж будь-який елемент, який вставляється після. Набір у Java не підтримує жодного порядку. Хоча Set надає іншу альтернативу під назвою SortedSet, яка може зберігати набір елементів у певному порядку сортування, визначеному методами Порівняння та Порівняння об'єктів, що зберігаються у Наборі.
3) Популярна реалізація інтерфейсу List на Java включає ArrayList, Vector та LinkedList. Хоча популярна реалізація інтерфейсу Set включає HashSet, TreeSet і LinkedHashSet.
Цілком зрозуміло, що якщо вам потрібно підтримувати порядок вставки або об’єкт, і ви колекція може містити дублікати, ніж List - це шлях. З іншого боку, якщо вашою вимогою є підтримка унікальної колекції без копій, ніж Set, це шлях.
Список:
Набір:
Set<E>
і List<E>
обидва використовуються для зберігання елементів типу E
. Різниця полягає в тому, що Set
вони зберігаються не упорядкованим способом і не дозволяють повторювати значення. List
використовується для зберігання елементів впорядкованому способі, і це дозволяє дублювати значення.
Set
елементи не можуть отримати доступ до позиції індексу, а List
елементи можуть бути доступні з позицією індексу.
Привіт Стільки відповідей уже дано .. Дозвольте зазначити деякі моменти, які досі не згадуються:
RandomAccess
інтерфейс, який є маркером інтерфейсу для швидшого доступу. Жодна з реалізацій Set не робить цього.ListIterator
який підтримує ітерацію в обох напрямках . Набір використовує Ітератор, який підтримує лише 1 спосіб ітераціїНайбільша різниця - це базове поняття.
З інтерфейсу Set and List . Набір - це концепція математики. Встановити метод розширює collection.however Не додає новий метод. size () означає кардинальність (більше - BitSet.cardinality, лінійний лічильник Log Журнал журналу , HyperLogLog ). addAll () означає об'єднання. retainAll () означає перехрестя. removeAll () означає різницю.
Однак список НЕ вистачає цих понять. Список додає багато методів для підтримки концепції послідовностей, які інтерфейс колекції не постачає. Основна концепція - INDEX . наприклад, додавати (індекс, елемент), отримати (індекс), пошук (indexOf ()), видалити (індекс) елемент. У списку також міститься підліст " Перегляд колекції " . Набір не мають перегляду. не мають позиційного доступу. У списку також представлено багато алгоритмів у класі Collections . сортувати (Список), binarySearch (Список), зворотний (Список), перетасувати (Список), залити (Список). Параметр методу - це інтерфейс List . дублюючі елементи - лише результат понять. не істотна різниця.
Отже, істотною відмінністю є концепція. Набір - це концепція набору математики. Список - це концепція послідовності.
Ось чіткий приклад з бурхливим. я створюю набір і список. то я намагаюся зберігати 20 випадково генерованих значень у кожному списку. згенероване значення може бути в діапазоні від 0 до 5
s = [] as Set
l = []
max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}
println "\n"
println "Set : $s "
println "list : $l
Результат :
випадкові номери: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Набір: [4, 1, 0, 2, 3]
список: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Ви можете бачити, що різниця полягає в тому, що:
Набір: Набір не може мати копії елементів у своїх колекціях. це також не упорядкована колекція. Для доступу до даних із Set, потрібно використовувати лише Iterator, а отримання на основі індексу неможливо. В основному використовується, коли вимагається колекція унікальності.
Список: Список може мати повторювані елементи із впорядкованим природним чином. Таким чином, з нього можна отримати дані на основі індексу або ітератора. Він широко використовується для зберігання колекції, до якої потрібно отримати доступ на основі індексу.
Назва теми: Список VS Set
Я щойно пройшов найважливішу тему Java під назвою Collections Framework. Я думав поділитися з вами своїми маленькими знаннями про колекції. Список, Набір, Карта - найважливіша тема цієї теми. Тож почнемо зі списку та встановлення.
Різниця між списком та набором:
Список - це колекційний клас, який розширює AbstractList
клас, де як Set - це колекційний клас, який розширює AbstractSet
клас, але обидва реалізує інтерфейс колекції.
Інтерфейс списку дозволяє повторювати значення (елементи), тоді як встановити інтерфейс не дозволяє повторювати значення. У разі дублювання елементів у Set, він замінює старі значення.
Інтерфейс списку дозволяє отримати значення NULL там, де інтерфейс Set не дозволяє Null. У разі використання нульових значень у Set задає NullPointerException
.
Інтерфейс списку підтримує порядок вставки. Це означає, що ми додаємо елементи в Список таким же чином, як і отримуємо його за допомогою ітератора або для кожного стилю. Тоді як Set
реалізації не обов'язково підтримують порядок вставки. (Хоча SortedSet
використовує TreeSet
та LinkedHashSet
підтримує порядок вставки).
В інтерфейсі списку визначені власні методи, тоді як інтерфейс Set не має власного методу, тому Set використовує лише методи інтерфейсу колекції.
Інтерфейс списку має один спадковий клас під назвою, Vector
тоді як інтерфейс Set не має спадкового класу
І останнє, але не менш важливе ... listIterator()
Метод можна використовувати лише для переходу елементів у класах List List, тоді як ми можемо використовувати метод iterator () для доступу до набору елементів класу
Що ще ми можемо додати? Будь ласка, дай мені знати.
Дякую.
List
і Set
інтерфейси , які також мають «базові» впровадження в вигляді абстрактного класу (які ви згадали). Крім того, №3 є абсолютно неточним , оскільки більшість наборів дозволяють нульові значення (але від реалізації залежить). Я не розумію №5 і №7, і для №6 Vector
це не є спадщиною, а просто синхронізовано і не є кращим для використання, за винятком випадків, коли потрібна синхронізація.
Набір:
Не може бути повторюваних значень Упорядкування залежить від реалізації. За замовчуванням це не впорядковано. Неможливо отримати доступ за індексом
Список:
Може мати повторювані значення, упорядковані за замовчуванням. Може мати доступ за індексом