Junior
Qual è la differenza tra le interfacce List e Set in Java?
sobes.tech AI
Risposta dell'AI
Le principali differenze tra le interfacce List e Set in Java sono le seguenti:
-
Ordine degli elementi:
Listmantiene l'ordine di inserimento degli elementi. Gli elementi hanno indici che partono da 0.Setnon garantisce l'ordine degli elementi. Alcune implementazioni possono avere un ordine definito (ad esempio,LinkedHashSet,TreeSet), ma l'interfacciaSetnon lo richiede.
-
Doppioni:
Listpermette di memorizzare elementi duplicati.Setnon permette duplicati. Quando si tenta di aggiungere un duplicato, l'operazione di aggiunta viene ignorata o restituiscefalse(a seconda dell'implementazione e del metodo).
-
Prestazioni:
- Le operazioni di aggiunta e rimozione nel mezzo di una
Listpossono essere più lente (specialmente perArrayList) rispetto a unSet. - La verifica della presenza di un elemento (
contains) in unSetbasato su hashing (HashSet) è generalmente più veloce (in media O(1)) rispetto a unaList(in media O(n)). - Le operazioni basate su indice (ad esempio,
get,set) sono disponibili solo inList.
- Le operazioni di aggiunta e rimozione nel mezzo di una
-
Implementazioni:
- Implementazioni tipiche di
List:ArrayList,LinkedList,Vector. - Implementazioni tipiche di
Set:HashSet,LinkedHashSet,TreeSet.
- Implementazioni tipiche di
Ecco alcuni esempi che mostrano le differenze:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CollectionDifferences {
public static void main(String[] args) {
// List permette duplicati e mantiene l'ordine
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Aggiunta di un duplicato
System.out.println("List: " + list); // Mostrerà [Apple, Banana, Apple]
System.out.println("Elemento all'indice 1: " + list.get(1)); // Accesso tramite indice
// Set non permette duplicati e l'ordine non è garantito (per HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Tentativo di aggiunta di un duplicato - sarà ignorato
System.out.println("Set: " + set); // Mostrerà qualcosa come [Apple, Banana] o [Banana, Apple]
// set.get(1); // Errore di compilazione - nessun accesso tramite indice
}
}
Tabella comparativa:
| Caratteristica | List | Set |
|---|---|---|
| Ordine | Garantito (ordine di inserimento) | Non garantito (per HashSet, TreeSet ha ordine ordinato) |
| Duplicati | Permessi | Non permessi |
| Accesso tramite indice | Possibile (get(int index)) |
Impossibile |
| Performance contains() | O(n) in media (per ArrayList) | O(1) in media (per HashSet) |
| Implementazioni tipiche | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |