Junior
Care este diferența dintre interfețele List și Set în Java?
sobes.tech AI
Răspuns de la AI
Principalele diferențe dintre interfețele List și Set în Java sunt următoarele:
-
Ordinea elementelor:
Listpăstrează ordinea de inserare a elementelor. Elementele au indici care încep de la 0.Setnu garantează ordinea elementelor. Unele implementări pot avea o anumită ordine (de exemplu,LinkedHashSet,TreeSet), dar interfațaSetnu o cere.
-
Dubluri:
Listpermite stocarea elementelor duplicate.Setnu permite duplicate. La încercarea de a adăuga un duplicat, operația fie este ignorată, fie returneazăfalse(în funcție de implementare și metodă).
-
Performanță:
- Operațiile de adăugare și ștergere în mijlocul unui
Listpot fi mai lente (mai ales pentruArrayList) decât în cazul unuiSet. - Verificarea dacă un element există (
contains) într-unSetbazat pe hashing (HashSet) este de obicei mai rapidă (în medie O(1)) comparativ cu unList(în medie O(n)). - Operațiile bazate pe index (
get,set) sunt disponibile doar înList.
- Operațiile de adăugare și ștergere în mijlocul unui
-
Implementări:
- Implementări tipice de
List:ArrayList,LinkedList,Vector. - Implementări tipice de
Set:HashSet,LinkedHashSet,TreeSet.
- Implementări tipice de
Iată exemple care ilustrează diferențele:
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 permite duplicate și păstrează ordinea
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Adăugăm un duplicat
System.out.println("List: " + list); // Va afișa [Apple, Banana, Apple]
System.out.println("Element la indexul 1: " + list.get(1)); // Accesare după index
// Set nu permite duplicate și ordinea nu este garantată (pentru HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Încercare de adăugare a unui duplicat - va fi ignorată
System.out.println("Set: " + set); // Va afișa ceva de genul [Apple, Banana] sau [Banana, Apple]
// set.get(1); // Eroare de compilare - nu există acces după index
}
}
Tabel comparativ:
| Caracteristică | List | Set |
|---|---|---|
| Ordine | Garantată (ordine de inserare) | Nu garantată (pentru HashSet, TreeSet are ordine sortată) |
| Duplicate | Permis | Interzis |
| Acces după index | Posibil (get(int index)) |
Imposibil |
| Performanță contains() | O(n) în medie (pentru ArrayList) | O(1) în medie (pentru HashSet) |
| Implementări tipice | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |