Wat is het fundamentele verschil tussen de interfaces Set<E>
en List<E>
?
Antwoord 1, autoriteit 100%
List
is een geordende reeks elementen, terwijl Set
een afzonderlijke lijst van elementen is die ongeordend is (dank u, Quinn Taylor).
Een geordende collectie (ook bekend als a
volgorde). De gebruiker van deze interface
heeft nauwkeurige controle over waar in de
lijst elk element wordt ingevoegd. De
gebruiker heeft toegang tot elementen door hun
integer index (positie in de lijst),
en zoek naar elementen in de lijst.
Een verzameling die no . bevat
dubbele elementen. Meer formeel,
sets bevatten geen paar elementen e1
en e2 zodat e1.gelijk is aan (e2), en at
meest één null-element. Zoals geïmpliceerd door
zijn naam, deze interface modelleert de
wiskundige set abstractie.
Antwoord 2, autoriteit 46%
Lijst | Instellen | |
---|---|---|
Duplicaten | Ja | Nee |
Bestelling | Besteld | Afhankelijk van implementatie |
Positietoegang | Ja | Nee |
Antwoord 3, autoriteit 14%
Geordende lijsten van elementen (uniek of niet)
Voldoet aan de Java-interface genaamd List
Toegankelijk via index
Geïmplementeerd met
- LinkedList
- ArrayList
Lijsten met unieke elementen:
Voldoet aan de Java-interface genaamd Set
Is niettoegankelijk voor index
Geïmplementeerd met
- HashSet (ongeordend)
- LinkedHashSet (besteld)
- TreeSet (gesorteerd op natuurlijke volgorde of op opgegeven comparator)
Beide interfaces Set
en List
voldoen aan de Java-interface genaamd Collection
Antwoord 4, autoriteit 6%
Een set kan geen dubbele elementen bevatten, terwijl een lijst dat wel kan. Een lijst (in Java) houdt ook orde in.
Antwoord 5, autoriteit 3%
- Een lijst is een geordende groepering van items
- Een set is een ongeordende groepering van items waarbij geen duplicaten zijn toegestaan (meestal)
Conceptueel verwijzen we meestal naar een ongeordende groepering die duplicaten toestaat als een tas en geen duplicaten toestaat als een set.
Antwoord 6, autoriteit 2%
Lijst
- Is een geordende groepering van elementen.
- Lijst wordt gebruikt om elementen met duplicaten te verzamelen.
- Nieuwe methoden zijn gedefinieerd in Lijst
interface.
Instellen
- Is een ongeordende groepering van elementen.
- Set wordt gebruikt voor het verzamelen van elementen zonder duplicaten.
- Er zijn geen nieuwe methoden gedefinieerd binnen de Set-interface, dus we moeten de methoden van de verzamelingsinterface alleen gebruiken met Set-subklassen.
Antwoord 7, autoriteit 2%
Lijst:
List
s staan over het algemeen dubbele objecten toe.
List
s moeten worden besteld en zijn daarom toegankelijk via index.
Implementatieklassen omvatten: ArrayList
, LinkedList
, Vector
Instellen:
Set
s staan geendubbele objecten toe.
De meeste implementaties zijn ongeordend, maar het is implementatiespecifiek.
Implementatieklassen omvatten:
HashSet
(ongeordend),
LinkedHashSet
(besteld),
TreeSet
(volgens natuurlijke volgorde of door verstrekte vergelijker)
Antwoord 8
Als we het over de Java-interfaces hebben, waarom niet kijken naar de Javadoc ?!
- Een
List
is een geordende verzameling (volgorde), die doorgaans toelaat:
duplicaten - Een
Set
a is een verzameling die geen dubbele elementen bevat, iteratie
bestelling kan worden gegarandeerd door de implementatie
Er is GEEN melding gemaakt van een gebrek aan orde met betrekking tot Sets: het hangt af van de implementatie.
Antwoord 9
Lijst:
Lijst staat dubbele elementen en null-waarden toe. Gemakkelijk te doorzoeken met behulp van de bijbehorende index van de elementen en het zal ook elementen in invoegvolgorde weergeven.
Voorbeeld:(linkedlist)
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);
}
}
}
Uitvoer:
1
1
555
333
888
555
null
null
Waarde:1
Waarde:555
Waarde:333
Waarde:888
Waarde:555
Waarde:null
Waarde:null
Instellen:
Set staat geen dubbele elementen toe en staat een enkele null-waarde toe. Het behoudt geen volgorde om elementen weer te geven. Alleen TreeSet
wordt in oplopende volgorde weergegeven.
Voorbeeld:(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");
}
}
}
Uitvoer:
alle
hallo
welkom
wereld
java.lang.NullPointerException
Set staat geen null-waarde en dubbele waarde toe
Antwoord 10
Dit is misschien niet het antwoord dat u zoekt, maar de JavaDoc van de collections-klassen is eigenlijk behoorlijk beschrijvend. Kopieer/plakt:
Een geordende collectie (ook bekend als a
volgorde). De gebruiker van deze interface
heeft nauwkeurige controle over waar in de
lijst elk element wordt ingevoegd. De
gebruiker heeft toegang tot elementen door hun
integer index (positie in de lijst),
en zoek naar elementen in de lijst.In tegenstelling tot sets, zijn lijsten meestal toegestaan
dubbele elementen. Meer formeel,
lijsten staan meestal paren van . toe
elementen e1 en e2 zodanig dat
e1.is gelijk aan (e2), en ze zijn meestal
sta meerdere null-elementen toe als ze
helemaal geen null-elementen toestaan. Het is niet
ondenkbaar dat iemand zou willen
om een lijst te implementeren die verbiedt
duplicaten, door runtime te gooien
uitzonderingen wanneer de gebruiker probeert om
voeg ze in, maar we verwachten dit gebruik
zeldzaam zijn.
Antwoord 11
Een set is een ongeordende groep van verschillende objecten – er zijn geen dubbele objecten toegestaan. Het wordt over het algemeen geïmplementeerd met behulp van de hash-code van de objecten die worden ingevoegd. (Specifieke implementaties kunnen volgorde toevoegen, maar de Set-interface zelf niet.)
Een lijst is een geordende groep objecten die duplicaten kan bevatten. Het kan worden geïmplementeerd met een ArrayList
, LinkedList
, enz.
Antwoord 12
1.Lijst staat dubbele waarden toe en set staat geen dubbele waarden toe
2.Lijst behoudt de volgorde waarin u elementen in de lijst hebt ingevoegd
Set handhaaft de volgorde niet.
3.Lijst is een geordende reeks elementen, terwijl Set een afzonderlijke lijst van elementen is die ongeordend is.
Antwoord 13
Enkele noemenswaardige verschillen tussen List en Set in Java worden als volgt gegeven:
1)Het fundamentele verschil tussen Lijst en Set in Java is het toestaan van dubbele elementen. Lijst in Java staat duplicaten toe, terwijl Set geen duplicaat toestaat. Als u duplicaat in Set invoegt, vervangt het de oudere waarde. Elke implementatie van Set in Java bevat alleen unieke elementen.
2)Een ander belangrijk verschil tussen List en Set in Java is de volgorde. Lijst is een geordende verzameling, terwijl Set een ongeordende verzameling is. Lijst handhaaft de invoegvolgorde van elementen, wat betekent dat elk element dat eerder wordt ingevoegd, op een lagere index gaat dan elk element dat erna wordt ingevoegd. Set in Java handhaaft geen enkele volgorde. Hoewel Set een ander alternatief biedt, SortedSet genaamd, dat Set-elementen kan opslaan in een specifieke sorteervolgorde die is gedefinieerd door Vergelijkbare en Vergelijkingsmethoden van objecten die zijn opgeslagen in Set.
3)Populaire implementatie van de List-interface in Java omvat ArrayList, Vector en LinkedList. Terwijl de populaire implementatie van de Set-interface HashSet, TreeSet en LinkedHashSet omvat.
Het is vrij duidelijk dat als je de invoegvolgorde of het object moet behouden en je verzameling duplicaten kan bevatten, List een goede keuze is. Aan de andere kant, als het uw vereiste is om een unieke collectie te behouden zonder duplicaten, dan is Set de juiste keuze.
Antwoord 14
Lijst versus set
1) Set staat geen duplicaten toe. Lijst staat duplicaat toe. Op basis van de implementatie van Set, handhaaft het ook de invoegvolgorde.
bijv.: LinkedHashSet
. Het handhaaft de invoegvolgorde. Raadpleeg klik hier
2) bevatmethode. Door de aard van de Set zal het betere toegang bieden. In het beste geval is het o(1). Maar List heeft een prestatieprobleem om contains
op te roepen.
Antwoord 15
Factor | Lijst | Instellen |
---|---|---|
Is geordende groeperingselementen? | JA | NEE |
Biedt positionele toegangdoor index? | JA | NEE |
Kan dubbele elementenopslaan? | JA | NEE |
Kan meerdere null -elementen worden opgeslagen? |
JA | NEE |
Kinderen: | ArrayList , LinkedList , Vector en Stack |
HashSet en LinkedHashSet |
Antwoord 16
Alle klassen List
behouden de volgorde van invoeging. Ze gebruiken verschillende implementaties op basis van prestaties en andere kenmerken (bijv. ArrayList
voor de snelheid van toegang tot een specifieke index, LinkedList
voor het eenvoudig handhaven van de volgorde). Omdat er geen sleutel is, zijn duplicaten toegestaan.
De klassen Set
behouden de invoegvolgorde niet. Ze kunnen optioneel een specifieke volgorde opleggen (zoals bij SortedSet
), maar hebben meestal een door de implementatie gedefinieerde volgorde op basis van een hashfunctie (zoals bij HashSet
). Aangezien Set
s toegankelijk zijn met een sleutel, zijn duplicaten niet toegestaan.
Antwoord 17
Bestellen… een lijst heeft een bestelling, een set niet.
Antwoord 18
Lijst:
- Duplicaten toegestaan.
- Geordend in groeperingselementen. (Met andere woorden met een vaste volgorde. Het is niet nodig om in oplopende volgorde te sorteren)
Instellen:
- Duplicaten zijn niet toegestaan.
- Ongeordend in groeperingselementen. (Met andere woorden zonder duidelijke volgorde. Het kan wel of niet in oplopende volgorde worden gerangschikt)
Antwoord 19
Lijsten Setzijn beide interfaces. Ze breiden allebei de collectie-interface uit. De belangrijke verschillen tussen set en lijst zijn:
- Dubbele objecten
Het belangrijkste verschil tussen Listen Setis dat Listduplicaten toestaat terwijl Set geen duplicaten toestaat.
- Bestellen
Lijstis een geordende verzameling die de invoegvolgorde handhaaft, wat betekent dat bij het weergeven van de lijstinhoud de elementen worden weergegeven in dezelfde volgorde als waarin ze in de lijst zijn ingevoegd.
Setis een ongeordende verzameling, er wordt geen volgorde aangehouden. Er zijn maar weinig implementaties van Setdie de volgorde behouden, zoals LinkedHashSet(het handhaaft de elementen in de volgorde van invoegen).
- Null-elementen
Lijststaat een willekeurig aantal null-elemententoe. Setkan maximaal één null-elementbevatten.
Antwoord 20
Set<E>
en List<E>
worden beide gebruikt om elementen van het type E
op te slaan. Het verschil is dat Set
ongeordend wordt opgeslagen en geen dubbele waarden toestaat. List
wordt gebruikt om elementen op een geordende manier op te slaan en staat dubbele waarden toe.
Set
-elementen zijn niet toegankelijk via een indexpositie en List
-elementen zijn toegankelijk met een indexpositie.
Antwoord 21
Instellen:
Een set kan geen dubbele elementen in zijn collecties hebben. het is ook een ongeordende verzameling. Om toegang te krijgen tot de gegevens van Set, is het vereist om alleen Iterator te gebruiken en is het ophalen op basis van indexen niet mogelijk. Het wordt voornamelijk gebruikt wanneer het verzamelen van uniciteit vereist is.
Lijst:
Een lijst kan dubbele elementen hebben, met de natuurlijke volgorde zoals deze wordt ingevoegd.
Zo kunnen gegevens worden opgehaald op basis van index of iterator. Het wordt veel gebruikt om verzamelingen op te slaan die toegankelijk moeten zijn op basis van index.
Antwoord 22
Hallo Er zijn al zoveel antwoorden gegeven..Laat me op enkele punten wijzen die tot nu toe niet zijn genoemd:
- De meeste List-implementaties (ArrayList,Vector) implementeren
RandomAccess
-interface, een markeringsinterface voor snellere toegang. Geen van de Set-implementaties doet dat. - List gebruikt één speciale Iterator genaamd
ListIterator
die iteratie in beide richtingen ondersteunt. Set gebruikt Iterator die slechts 1-way iteratie ondersteunt - HashSet neemt 5,5 keer meer geheugenin beslag dan ArrayList om op te slaan
hetzelfde aantal elementen.
Antwoord 23
Het grootste verschil is het basisconcept.
Vanuit de interface Seten List. Setis een wiskundeconcept. De methode Setbreidt de verzameling uit. Voeg echter geen nieuwe methode toe. size() betekent kardinaliteit (meer is BitSet.cardinality, Linear counter,Log Log,HyperLogLog). addAll() betekent unie. behoudenAll() betekent kruising. removeAll() betekent verschil.
Echter Lijstontbreken deze concepten. Lijstvoeg veel methoden toe om het reeksconcept te ondersteunen dat de Collection-interface niet levert. kernconcept is INDEX. zoals add(index,element),get(index),search(indexOf()),remove(index) element. Lijst biedt ook “Verzamelingsweergave” subLijst. Setheeft geen weergave. hebben geen positionele toegang. Lijstbiedt ook veel algoritmen in de klasse Collecties. sort(Lijst),binairZoeken(Lijst),reverse(Lijst),shuffle(Lijst),fill(Lijst). de methode params is de Lijstinterface. dubbele elementen zijn slechts het resultaat van concepten. niet het wezenlijke verschil.
Dus het essentiële verschil is het concept. Setis een wiskundesetconcept.Lijstis een reeksconcept.
Antwoord 24
Hier is een duidelijk voorbeeld met groovy. ik maak een set en een lijst.
dan probeer ik 20 willekeurig gegenereerde waarde op te slaan in elke lijst. de gegenereerde waarde kan tussen 0 en 5 liggen
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
Het resultaat:
willekeurige getallen: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Instellen: [4, 1, 0, 2, 3]
lijst: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Je kunt zien dat het verschil is dat:
- Set staat geen dubbele waarden toe.
- Lijst dubbele waarden toestaan.
Antwoord 25
ONDERWERP Naam: Lijst VS Set
Ik heb zojuist het belangrijkste onderwerp van Java, genaamd Collections Framework, doorgenomen. Ik dacht mijn kleine kennis over collecties met je te delen. Lijst, set, kaart zijn het belangrijkste onderwerp ervan. Dus laten we beginnen met Lijst en Set.
Verschil tussen lijst en set:
-
List is een collectieklasse die de klasse
AbstractList
uitbreidt, terwijl as Set een collectieklasse is die de klasseAbstractSet
uitbreidt, maar beide implementeren de Collectie-interface. -
Lijstinterface staat dubbele waarden (elementen) toe, terwijl Set-interface geen dubbele waarden toestaat. In het geval van dubbele elementen in Set, vervangt het oudere waarden.
-
Lijstinterface staat NULL-waarden toe, terwijl de interface Set geen Null-waarden toestaat. In het geval dat Null-waarden in Set worden gebruikt, geeft dit
NullPointerException
. -
Lijstinterface handhaaft invoegvolgorde. Dat betekent dat de manier waarop we de elementen in de lijst toevoegen op dezelfde manier als we deze verkrijgen met iterator of voor elke stijl. Terwijl
Set
implementaties niet noodzakelijkerwijs de invoegvolgorde behouden. (HoewelSortedSet
TreeSet
gebruikt, enLinkedHashSet
de invoegvolgorde behoudt). -
Lijstinterface heeft zijn eigen gedefinieerde methoden, terwijl de Set-interface geen eigen methode heeft, dus Set gebruikt alleen de verzamelingsinterfacemethoden.
-
Lijstinterface heeft één legacy-klasse genaamd
Vector
, terwijl Set-interface geen legacy-klasse heeft -
Last but not least… De methode
listIterator()
kan alleen worden gebruikt om door de elementen binnen List Classes te bladeren, terwijl we de methode iterator() kunnen gebruiken om toegang te krijgen tot de klasse Set elementen
Kunnen we nog iets toevoegen? Laat het me weten.
Bedankt.
Antwoord 26
Instellen:
Kan geen dubbele waarden hebben
Bestellen is afhankelijk van de uitvoering. Standaard wordt het niet besteld
Geen toegang via index
Lijst:
Kan dubbele waarden hebben
Standaard besteld
Kan toegang hebben via index