Was ist der grundlegende Unterschied zwischen Set<E>
und List<E>
Schnittstellen?
Was ist der grundlegende Unterschied zwischen Set<E>
und List<E>
Schnittstellen?
Antworten:
List
ist eine geordnete Folge von Elementen, während Set
es sich um eine eindeutige Liste von Elementen handelt, die ungeordnet ist (danke, Quinn Taylor ).
Eine bestellte Sammlung (auch als Sequenz bekannt). Der Benutzer dieser Schnittstelle hat eine genaue Kontrolle darüber, wo in der Liste jedes Element eingefügt wird. Der Benutzer kann über seinen ganzzahligen Index (Position in der Liste) auf Elemente zugreifen und nach Elementen in der Liste suchen.
Eine Sammlung, die keine doppelten Elemente enthält. Formal enthalten Mengen kein Elementpaar e1 und e2, so dass e1.equals (e2) und höchstens ein Nullelement. Wie der Name andeutet, modelliert diese Schnittstelle die Abstraktion der mathematischen Menge.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Geordnete Elementlisten (eindeutig oder nicht)
Entspricht der Java-Schnittstelle mit dem NamenList
Kann über den Index aufgerufen werden
implemetentiert mit
Listen eindeutiger Elemente:
Konform mit der Java-Schnittstelle mit dem NamenSet
Kann nicht über den Index aufgerufen werden
implemetentiert mit
Beide Schnittstellen Set
und List
passen sich an die Java Schnittstelle mit dem NamenCollection
Konzeptionell beziehen wir uns normalerweise auf eine ungeordnete Gruppierung, die Duplikate als Tasche zulässt und keine Duplikate zulässt.
Liste
einstellen
List
s erlauben im Allgemeinen doppelte Objekte.
List
s müssen bestellt werden und sind daher über den Index zugänglich.
Implementierungsklassen umfassen: ArrayList
,LinkedList
,Vector
Set
s nicht doppelten Objekte. Die meisten Implementierungen sind ungeordnet, aber implementierungsspezifisch.
Implementierungsklassen umfassen:
HashSet
(ungeordnet),
LinkedHashSet
(geordnet),
TreeSet
(geordnet nach natürlicher Reihenfolge oder nach bereitgestelltem Komparator)
Wenn wir über die Java-Schnittstellen sprechen, schauen Sie sich doch das Javadoc an.
List
ist eine geordnete Sammlung (Sequenz), die normalerweise Duplikate zulässtSet
a ist eine Sammlung, die keine doppelten Elemente enthält. Die Iterationsreihenfolge kann durch die Implementierung garantiert werdenEs gibt KEINE Erwähnung über mangelnde Ordnung in Bezug auf Sets: Dies hängt von der Implementierung ab.
LinkedHashSet
auf der linken Seite, wenn der Code später von der Bestellung abhängt . Ich verwende es nur, Set
wenn ich es wirklich wie eines verwende, da Sie nicht davon ausgehen können, dass die zugrunde liegende Implementierung eine LinkedHashSet
oder eine solche ist. Es kann heute sein, aber morgen ändert sich der Code und es wird fehlschlagen.
Dies ist möglicherweise nicht die Antwort, nach der Sie suchen, aber das JavaDoc der Sammlungsklassen ist tatsächlich ziemlich beschreibend. Kopieren / Einfügen:
Eine bestellte Sammlung (auch als Sequenz bekannt). Der Benutzer dieser Schnittstelle hat eine genaue Kontrolle darüber, wo in der Liste jedes Element eingefügt wird. Der Benutzer kann über seinen ganzzahligen Index (Position in der Liste) auf Elemente zugreifen und nach Elementen in der Liste suchen.
Im Gegensatz zu Sets erlauben Listen normalerweise doppelte Elemente. Formalerweise erlauben Listen typischerweise Paare von Elementen e1 und e2, so dass e1.equals (e2), und sie erlauben typischerweise mehrere Nullelemente, wenn sie überhaupt Nullelemente zulassen. Es ist nicht unvorstellbar, dass jemand eine Liste implementieren möchte, die Duplikate verbietet, indem er Laufzeitausnahmen auslöst, wenn der Benutzer versucht, sie einzufügen. Wir erwarten jedoch, dass diese Verwendung selten ist.
Ein Satz ist eine ungeordnete Gruppe unterschiedlicher Objekte. Es sind keine doppelten Objekte zulässig. Es wird im Allgemeinen mit dem Hash-Code der eingefügten Objekte implementiert. (Bestimmte Implementierungen können die Reihenfolge erhöhen, die Set-Schnittstelle selbst jedoch nicht.)
Eine Liste ist eine geordnete Gruppe von Objekten, die Duplikate enthalten können. Es könnte mit einem umgesetzt werden ArrayList
, LinkedList
usw.
List
wird nicht bestellt 😕
Liste:
Liste erlaubt doppelte Elemente und Nullwerte. Einfache Suche mit dem entsprechenden Index der Elemente und es werden auch Elemente in Einfügereihenfolge angezeigt. Beispiel: (verknüpfte Liste)
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);
}
}
}
Ausgabe:
1
1
555
333
888
555
null
null
Wert: 1
Wert: 555
Wert: 333
Wert: 888
Wert: 555
Wert: null
Wert: null
Set:
Set erlaubt keine doppelten Elemente und erlaubt einen einzelnen Nullwert. Es wird keine Reihenfolge zum Anzeigen von Elementen beibehalten. NurTreeSet
wird nur in aufsteigender Reihenfolge angezeigt.
Beispiel: (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");
}
}
}
Ausgabe:
all
hallo
willkommen
Welt
java.lang.NullPointerException
Set nicht Nullwert und doppelten Wert erlauben
1.Liste erlaubt doppelte Werte und set erlaubt keine doppelten Werte
2.List verwaltet die Reihenfolge, in der Sie Elemente in die Liste eingefügt haben. Set behält die Reihenfolge nicht bei. 3.Liste ist eine geordnete Folge von Elementen, während Set eine eindeutige Liste von Elementen ist, die nicht geordnet ist.
Liste Vs Set
1) Set erlaubt keine Duplikate. Liste erlaubt Duplizieren. Basierend auf der Implementierung von Set wird auch die Einfügereihenfolge beibehalten.
zB : LinkedHashSet
. Es behält die Einfügereihenfolge bei. Bitte klicken Sie hier
2) enthält Methode. Durch die Art des Sets wird der Zugriff verbessert. Bester Fall ist es o (1). List muss jedoch ein Leistungsproblem aufrufen contains
.
Alle List
Klassen behalten die Einfügereihenfolge bei. Sie verwenden unterschiedliche Implementierungen, die auf der Leistung und anderen Merkmalen basieren (z. B. ArrayList
für die Geschwindigkeit des Zugriffs auf einen bestimmten Index, LinkedList
um einfach die Reihenfolge aufrechtzuerhalten). Da kein Schlüssel vorhanden ist, sind Duplikate zulässig.
Die Set
Klassen behalten keine Einfügereihenfolge bei. Sie können optional eine bestimmte Reihenfolge festlegen (wie bei SortedSet
), haben jedoch normalerweise eine implementierungsdefinierte Reihenfolge, die auf einer Hash-Funktion basiert (wie bei HashSet
). Da auf Set
s per Schlüssel zugegriffen wird, sind Duplikate nicht zulässig.
Bestellung ... eine Liste hat eine Bestellung, eine Menge nicht.
Einige bemerkenswerte Unterschiede zwischen List und Set in Java sind wie folgt angegeben:
1) Der grundlegende Unterschied zwischen List und Set in Java besteht darin, doppelte Elemente zuzulassen. List in Java erlaubt Duplikate, während Set keine Duplikate zulässt. Wenn Sie ein Duplikat in Set einfügen, wird der ältere Wert ersetzt. Jede Implementierung von Set in Java enthält nur eindeutige Elemente.
2) Ein weiterer wesentlicher Unterschied zwischen List und Set in Java ist die Reihenfolge. Liste ist eine geordnete Sammlung, während Set eine ungeordnete Sammlung ist. Die Liste behält die Einfügereihenfolge der Elemente bei. Dies bedeutet, dass jedes Element, das zuvor eingefügt wurde, einen niedrigeren Index aufweist als jedes Element, das danach eingefügt wird. Set in Java behält keine Reihenfolge bei. Set bietet jedoch eine weitere Alternative namens SortedSet, mit der Set-Elemente in einer bestimmten Sortierreihenfolge gespeichert werden können, die durch die Methoden Comparable und Comparator für in Set gespeicherte Objekte definiert wird.
3) Die beliebte Implementierung der List-Schnittstelle in Java umfasst ArrayList, Vector und LinkedList. Während die beliebte Implementierung der Set-Schnittstelle HashSet, TreeSet und LinkedHashSet umfasst.
Es ist ziemlich klar, dass List ein guter Weg ist, wenn Sie die Einfügereihenfolge oder das Objekt beibehalten müssen und Ihre Sammlung Duplikate enthalten kann. Wenn Sie jedoch eine eindeutige Sammlung ohne Duplikate verwalten möchten, ist Set der richtige Weg.
Liste:
Einstellen:
Set<E>
und List<E>
werden beide zum Speichern von Elementen des Typs verwendet E
. Der Unterschied besteht darin, dass Set
ungeordnet gespeichert wird und keine doppelten Werte zulässig sind. List
wird verwendet, um Elemente in geordneter Weise zu speichern, und es werden doppelte Werte zugelassen.
Set
Auf Elemente kann nicht über eine Indexposition zugegriffen werden, und auf List
Elemente kann über eine Indexposition zugegriffen werden.
Hallo, es gibt bereits so viele Antworten. Lassen Sie mich auf einige Punkte hinweisen, die bisher nicht erwähnt wurden:
RandomAccess
Schnittstelle, die eine Markierungsschnittstelle für einen schnelleren Zugriff darstellt. Keine der Set-Implementierungen macht das.ListIterator
der die Iteration in beide Richtungen unterstützt . Set verwendet Iterator, der nur eine Einwegiteration unterstütztDer größte Unterschied ist das Grundkonzept.
Über die Set- und List- Oberfläche. Set ist Mathematikkonzept. Die Set- Methode erweitert die Sammlung. Fügen Sie jedoch keine neue Methode hinzu. size () bedeutet Kardinalität (mehr ist BitSet.cardinality, Linear Counter , Log Log , HyperLogLog ). addAll () bedeutet Vereinigung. keepAll () bedeutet Kreuzung. removeAll () bedeutet Unterschied.
Jedoch Liste fehlt diese Konzepte. List fügt eine Menge Methoden hinzu, um das Sequenzkonzept zu unterstützen, das die Collection- Schnittstelle nicht bietet. Kernkonzept ist INDEX . wie add (index, element), get (index), search (indexOf ()), remove (index) element. Die Liste enthält auch die Unterliste " Sammlungsansicht " . Set habe keine Ansicht. habe keinen Positionszugang. List bietet auch viele Algorithmen in der Collections- Klasse. sort (Liste), binarySearch (Liste), reverse (Liste), shuffle (Liste), fill (Liste). Die Methode params ist List interface. doppelte Elemente sind nur das Ergebnis von Konzepten. nicht der wesentliche Unterschied.
Der wesentliche Unterschied ist also das Konzept. Set ist ein Mathematik-Set-Konzept. Liste ist Sequenzkonzept.
Hier ist ein klares Beispiel mit Groovy. Ich erstelle ein Set und eine Liste. dann versuche ich 20 zufällig generierte Werte in jeder Liste zu speichern. Der generierte Wert kann im Bereich von 0 bis 5 liegen
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
Das Ergebnis :
zufällige Zahlen: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Einstellen : [4, 1, 0, 2, 3]
Liste : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Sie können sehen, dass der Unterschied darin besteht, dass:
Set: Ein Set darf keine doppelten Elemente in seinen Sammlungen haben. Es ist auch eine ungeordnete Sammlung. Für den Zugriff auf die Daten von Set muss nur Iterator verwendet werden, und ein indexbasiertes Abrufen ist nicht möglich. Es wird hauptsächlich verwendet, wenn eine Eindeutigkeitssammlung erforderlich ist.
Liste: Eine Liste kann doppelte Elemente enthalten, wobei die natürliche Reihenfolge beim Einfügen angezeigt wird. Somit können Daten basierend auf Index oder Iterator abgerufen werden. Es wird häufig zum Speichern von Sammlungen verwendet, auf die basierend auf dem Index zugegriffen werden muss.
THEMA Name: Liste VS Set
Ich habe gerade Javas wichtigstes Thema namens Collections Framework durchgearbeitet. Ich dachte, ich würde mein kleines Wissen über Sammlungen mit Ihnen teilen. Liste, Set, Karte sind das wichtigste Thema. Beginnen wir also mit List and Set.
Unterschied zwischen Liste und Satz:
List ist eine Auflistungsklasse, die die Klasse erweitert AbstractList
, wobei Set eine Auflistungsklasse ist, die die Klasse erweitert AbstractSet
, aber beide die Collection-Schnittstelle implementiert.
Die Listenschnittstelle erlaubt doppelte Werte (Elemente), während die Set-Schnittstelle keine doppelten Werte zulässt. Bei doppelten Elementen in Set werden ältere Werte ersetzt.
Die Listenschnittstelle erlaubt NULL-Werte, während die Set-Schnittstelle keine Nullwerte zulässt. Bei Verwendung von Nullwerten in Set gibt es NullPointerException
.
Die Listenschnittstelle behält die Einfügereihenfolge bei. Das bedeutet, dass wir die Elemente in der Liste auf die gleiche Weise hinzufügen, wie wir sie mit dem Iterator oder für jeden Stil erhalten. Während Set
Implementierungen nicht unbedingt die Einfügereihenfolge beibehalten. (Obwohl die SortedSet
Einfügereihenfolge verwendet TreeSet
und LinkedHashSet
beibehalten wird).
Für die Listenschnittstelle sind eigene Methoden definiert, während für die Set-Schnittstelle keine eigene Methode definiert ist, sodass Set nur Methoden für die Sammlungsschnittstelle verwendet.
Die Listenschnittstelle hat eine Legacy-Klasse, Vector
während die Set-Schnittstelle keine Legacy-Klasse hat
Last but not least ... Die listIterator()
Methode kann nur verwendet werden, um durch die Elemente in Listenklassen zu blättern, während wir die iterator () -Methode verwenden können, um auf Set-Klassenelemente zuzugreifen
Können wir noch etwas hinzufügen? Lass es mich wissen, bitte.
Vielen Dank.
List
und Set
sind Schnittstellen , die auch als „Basis“ Implementierungen in Form einer abstrakten Klasse haben (die Sie erwähnt). Außerdem ist # 3 völlig ungenau , da die meisten Sätze Nullwerte zulassen (aber implementierungsabhängig). Ich verstehe # 5 und # 7 nicht und für # 6 Vector
ist es kein Vermächtnis, sondern es ist nur synchronisiert und wird nicht für die Verwendung bevorzugt, außer wenn eine Synchronisation erforderlich ist.
Einstellen:
Es dürfen keine doppelten Werte vorhanden sein. Die Reihenfolge hängt von der Implementierung ab. Standardmäßig ist es nicht bestellt. Kein Zugriff per Index möglich
Liste:
Kann doppelte Werte haben. Standardmäßig sortiert. Kann nach Index zugreifen