Qual è la differenza fondamentale tra le interfacce Set<E>
e List<E>
?
Qual è la differenza fondamentale tra le interfacce Set<E>
e List<E>
?
Risposte:
List
è una sequenza ordinata di elementi mentre Set
è un elenco distinto di elementi non ordinato (grazie, Quinn Taylor ).
Una raccolta ordinata (nota anche come sequenza). L'utente di questa interfaccia ha un controllo preciso su dove viene inserito ciascun elemento nell'elenco. L'utente può accedere agli elementi in base al loro indice intero (posizione nell'elenco) e cercare elementi nell'elenco.
Una raccolta che non contiene elementi duplicati. Più formalmente, i set non contengono coppie di elementi e1 ed e2 tali che e1.equals (e2) e al massimo un elemento null. Come implica il suo nome, questa interfaccia modella l'astrazione dell'insieme matematico.
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Elenchi di elementi ordinati (univoci o meno)
Conforme all'interfaccia Java denominataList
Accesso accessibile tramite indice
implementato usando
Elenchi di elementi unici:
Conforme all'interfaccia di Java chiamatoSet
Può non essere accessibile da index
implementato usando
Entrambe le interfacce Set
e sono List
conformi all'interfaccia Java denominataCollection
Concettualmente di solito ci riferiamo a un raggruppamento non ordinato che consente i duplicati come Bag e che non consente i duplicati è un set.
Elenco
Impostato
List
s generalmente consente oggetti duplicati.
List
gli s devono essere ordinati e sono quindi accessibili per indice.
Classi di implementazione includono: ArrayList
, LinkedList
,Vector
Set
s non consentono oggetti duplicati. La maggior parte delle implementazioni non è ordinata, ma è specifica per l'implementazione.
Le classi di implementazione includono:
HashSet
(non ordinate),
LinkedHashSet
(ordinate),
TreeSet
(ordinate per ordine naturale o per comparatore fornito)
Mentre parliamo delle interfacce Java, perché non guardare Javadoc ?!
List
è una raccolta ordinata (sequenza), che in genere consente duplicatiSet
a è una raccolta che non contiene elementi duplicati, l'ordine di iterazione può essere garantito dall'implementazioneNon si fa menzione della mancanza di ordine riguardo agli insiemi: dipende dall'implementazione.
LinkedHashSet
sul lato sinistro se il codice si basa sull'ordine in seguito. Lo uso solo Set
se lo uso davvero come uno, poiché non puoi presumere che l'implementazione sottostante sia una LinkedHashSet
o tale, potrebbe essere oggi, ma domani il codice cambia e fallirà.
Questa potrebbe non essere la risposta che stai cercando, ma JavaDoc delle classi di raccolte è in realtà piuttosto descrittivo. Copia / incollato:
Una raccolta ordinata (nota anche come sequenza). L'utente di questa interfaccia ha un controllo preciso su dove viene inserito ciascun elemento nell'elenco. L'utente può accedere agli elementi in base al loro indice intero (posizione nell'elenco) e cercare elementi nell'elenco.
A differenza dei set, gli elenchi in genere consentono elementi duplicati. Più formalmente, gli elenchi in genere consentono coppie di elementi e1 ed e2 tali che e1.equals (e2) e in genere consentono più elementi null se consentono affatto elementi null. Non è inconcepibile che qualcuno potrebbe voler implementare un elenco che proibisce i duplicati, generando eccezioni di runtime quando l'utente tenta di inserirli, ma ci aspettiamo che questo utilizzo sia raro.
Un set è un gruppo non ordinato di oggetti distinti: non sono ammessi oggetti duplicati. In genere viene implementato utilizzando il codice hash degli oggetti da inserire. (Le implementazioni specifiche possono aggiungere ordini, ma l'interfaccia Set stessa non lo fa.)
Un elenco è un gruppo ordinato di oggetti che può contenere duplicati. Potrebbe essere implementato con una ArrayList
, LinkedList
e così via
List
non viene ordinato 😕
Elenco: l'
elenco consente elementi duplicati e valori null. Facile da cercare utilizzando l'indice corrispondente degli elementi e inoltre visualizzerà gli elementi in ordine di inserimento. Esempio: (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);
}
}
}
Produzione:
1
1
555
333
888
555
null
null
Valore: 1
Valore: 555
Valore: 333
Valore: 888
Valore: 555
Valore: null
Valore: null
Set:
Set non consente alcun elemento duplicato e consente un singolo valore null.Non manterrà alcun ordine per visualizzare gli elementi.Solo TreeSet
verrà visualizzato in ordine crescente.
Esempio: (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");
}
}
}
Produzione:
tutto
ciao
benvenuto
mondo
java.lang.NullPointerException
Set non permette di valore nullo e valore duplicato
Elenco Vs Set
1) Set non consente duplicati. Elenco consente duplicati. Basato sull'implementazione di Set, mantiene anche l'ordine di inserimento.
ad es LinkedHashSet
. : . Mantiene l'ordine di inserimento. Fare clic qui
2) contiene metodo. Per natura del Set darà prestazioni migliori per l'accesso. Nel migliore dei casi è o (1). Ma List ha un problema di prestazioni da invocare contains
.
Tutte le List
classi mantengono l'ordine di inserimento. Usano implementazioni diverse in base alle prestazioni e ad altre caratteristiche (ad es. ArrayList
Per la velocità di accesso a un indice specifico, LinkedList
semplicemente per mantenere l'ordine). Poiché non esiste una chiave, sono consentiti duplicati.
Le Set
classi non mantengono l'ordine di inserimento. Possono facoltativamente imporre un ordine specifico (come con SortedSet
), ma in genere hanno un ordine definito dall'implementazione basato su una funzione hash (come con HashSet
). Poiché Set
è possibile accedere ai messaggi di posta elettronica, i duplicati non sono consentiti.
Ordine ... un elenco ha un ordine, un set no.
Poche note degne di nota tra List e Set in Java sono riportate come segue:
1) La differenza fondamentale tra List e Set in Java è consentire elementi duplicati. Elenco in Java consente duplicati mentre Set non consente duplicati. Se inserisci duplicati in Set, sostituirà il valore precedente. Qualsiasi implementazione di Set in Java conterrà solo elementi univoci.
2) Un'altra differenza significativa tra Elenco e Set in Java è l'ordine. Elenco è una raccolta ordinata mentre Set è una raccolta non ordinata. Elenco mantiene l'ordine di inserimento degli elementi, significa che qualsiasi elemento inserito prima andrà su un indice inferiore rispetto a qualsiasi elemento inserito dopo. Impostato in Java non mantiene alcun ordine. Sebbene Set fornisca un'altra alternativa chiamata SortedSet che può memorizzare gli elementi Set in un ordine di ordinamento specifico definito dai metodi Comparable e Comparator degli oggetti memorizzati in Set.
3) L'implementazione popolare dell'interfaccia List in Java include ArrayList, Vector e LinkedList. Mentre l'implementazione popolare dell'interfaccia Set include HashSet, TreeSet e LinkedHashSet.
È abbastanza chiaro che se è necessario mantenere l'ordine di inserimento o l'oggetto e la raccolta può contenere duplicati di Elenco è un modo per procedere. D'altra parte, se il tuo requisito è mantenere una raccolta unica senza duplicati rispetto a Set è la strada da percorrere.
Elenco:
Impostato:
Set<E>
e List<E>
sono entrambi usati per memorizzare elementi di tipo E
. La differenza è che Set
è memorizzato in modo non ordinato e non consente valori duplicati. List
viene utilizzato per memorizzare gli elementi in modo ordinato e consente valori duplicati.
Set
gli elementi non sono accessibili da una posizione di indice e gli List
elementi sono accessibili con una posizione di indice.
Salve Sono già state fornite così tante risposte ... Permettetemi di sottolineare alcuni punti che non sono stati menzionati finora:
RandomAccess
interfaccia che è un'interfaccia marcatore per un accesso più rapido. Nessuna delle implementazioni di Set lo fa.ListIterator
che supporta l'iterazione in entrambe le direzioni . Set utilizza Iterator che supporta solo l'iterazione a 1 viaLa più grande differenza è il concetto di base.
Dall'interfaccia Set and List . Set è il concetto di matematica.Il metodo Set estende la raccolta, tuttavia non aggiunge un nuovo metodo. size () significa cardinalità (altro è BitSet.cardinality, contatore lineare , Log Log , HyperLogLog ). addAll () significa unione. retainAll () significa intersezione. removeAll () significa differenza.
Tuttavia, elenca la mancanza di questi concetti. L'elenco aggiunge molti metodi per supportare il concetto di sequenza che l' interfaccia Collection non fornisce. il concetto di base è INDICE . come add (index, element), get (index), search (indexOf ()), remove (index) element. L'elenco fornisce anche l'elenco secondario " Vista raccolta " . Set non ha vista. non hanno accesso posizionale. L'elenco fornisce anche molti algoritmi nelle raccolte classe . sort (List), binarySearch (List), inversa (List), Shuffle (List), fill (List). il parametro params è l' interfaccia Elenco . elementi duplicati sono solo il risultato di concetti. non la differenza essenziale.
Quindi la differenza essenziale è il concetto. L'insieme è concetto dell'insieme di matematica. L'elenco è il concetto di sequenza.
Ecco un chiaro esempio di groovy. creo un set e un elenco. quindi provo a memorizzare 20 valori generati casualmente all'interno di ciascun elenco. il valore generato può essere compreso tra 0 e 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
Il risultato :
numeri casuali: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Impostato : [4, 1, 0, 2, 3]
elenco : [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Puoi vedere che la differenza è che:
Set: un set non può avere elementi duplicati nelle sue raccolte. è anche una raccolta non ordinata. Per accedere ai dati da Set, è necessario utilizzare solo Iterator e non è possibile il recupero basato sull'indice. Viene utilizzato principalmente ogni volta che è richiesta la raccolta di unicità.
Elenco: un elenco può avere elementi duplicati, con l'ordine naturale inserito. Pertanto, è possibile recuperare i dati in base all'indice o all'iteratore. È ampiamente utilizzato per archiviare la raccolta che deve accedere in base all'indice.
ARGOMENTO Nome: Elenco VS Set
Ho appena esaminato l'argomento più importante di Java chiamato Collections Framework. Ho pensato di condividere con te la mia piccola conoscenza delle Collezioni. Elenco, Set, Mappa sono l'argomento più importante di esso. Quindi iniziamo con Elenco e Set.
Differenza tra elenco e set:
Elenco è una classe di raccolta che estende la AbstractList
classe dove Set è una classe di raccolta che estende la AbstractSet
classe ma implementa entrambe l'interfaccia di raccolta.
L'interfaccia Elenco consente valori duplicati (elementi) mentre Imposta interfaccia non consente valori duplicati. In caso di elementi duplicati in Set, sostituisce i valori precedenti.
L'interfaccia dell'elenco consente valori NULL, mentre come interfaccia Set non consente valori Null. Nel caso in cui si utilizzino i valori Null in Set, si ottiene NullPointerException
.
L'interfaccia dell'elenco mantiene l'ordine di inserimento. Ciò significa che aggiungiamo gli elementi nella Lista nello stesso modo in cui li otteniamo usando iteratore o per ogni stile. Considerando che le Set
implementazioni non mantengono necessariamente l'ordine di inserimento. (Sebbene SortedSet
utilizzi TreeSet
e LinkedHashSet
mantenga l'ordine di inserimento).
L'interfaccia dell'elenco ha i propri metodi definiti mentre l'interfaccia Set non ha il proprio metodo, quindi Set utilizza solo i metodi dell'interfaccia Collection.
L'interfaccia dell'elenco ha una classe legacy chiamata Vector
mentre Set interface non ha alcuna classe legacy
Ultimo ma non meno importante ... Il listIterator()
metodo può essere utilizzato solo per scorrere gli elementi all'interno delle Classi elenco mentre possiamo usare il metodo iterator () per accedere agli elementi della classe Set
Nient'altro possiamo aggiungere? Per favore mi faccia sapere.
Grazie.
List
e Set
sono interfacce che hanno anche implementazioni "base" sotto forma di una classe astratta (che hai menzionato). Inoltre, # 3 è completamente impreciso , poiché la maggior parte dei set consente valori null (ma dipende dall'implementazione). Non capisco # 5 e # 7, e per # 6 Vector
non è legacy, ma è solo sincronizzato e non è preferito per l'uso tranne quando è necessaria la sincronizzazione.
Impostato:
Impossibile avere valori duplicati L'ordinamento dipende dall'implementazione. Per impostazione predefinita, non è ordinato Impossibile accedere per indice
Elenco:
Può avere valori duplicati Ordinati per impostazione predefinita Può avere accesso per indice