Junior
Mi a különbség a List és a Set interfészek között Java-ban?
sobes.tech MI
Válasz az MI-től
A Java List és Set interfészek közötti fő különbségek a következők:
-
Elemek sorrendje:
- A
Listmegőrzi a hozzáadás sorrendjét. Az elemek indexekkel rendelkeznek, kezdve 0-tól. - A
Setnem garantálja az elemek sorrendjét. Néhány megvalósítás (pl.LinkedHashSet,TreeSet) bizonyos sorrendet tartalmazhat, de azSetinterfész nem követeli meg.
- A
-
Duplikátumok:
- A
Listmegengedi a duplikált elemek tárolását. - A
Setnem engedélyezi a duplikált elemek tárolását. Ha duplikátumot próbál hozzáadni, az művelet vagy figyelmen kívül marad, vagyfalse-t ad vissza (a megvalósítástól és a metódustól függően).
- A
-
Teljesítmény:
- A
Listközepén történő hozzáadás és törlés műveletei lassabbak lehetnek (különösen azArrayListesetében), mint aSet-nél. - A
Set-eken belüli elem létezésének ellenőrzése (contains) általában gyorsabb (HashSetesetén átlagosan O(1)), mint aList-nél (átlagosan O(n)). - Az index alapú műveletek (
get,set) csak aList-ben érhetők el.
- A
-
Megvalósítások:
- Tipikus
Listmegvalósítások:ArrayList,LinkedList,Vector. - Tipikus
Setmegvalósítások:HashSet,LinkedHashSet,TreeSet.
- Tipikus
Íme néhány példa, amelyek bemutatják a különbségeket:
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) {
// A `List` duplikátumokat engedélyez és megőrzi a sorrendet
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Duplikátum hozzáadása
System.out.println("List: " + list); // Kiírja: [Apple, Banana, Apple]
System.out.println("List index 1-en: " + list.get(1)); // Hozzáférés index alapján
// A `Set` nem engedélyezi a duplikátumokat, és a sorrend nem garantált (HashSet esetén)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Duplikátum hozzáadása - figyelmen kívül marad
System.out.println("Set: " + set); // Valami ilyesmit ír ki: [Apple, Banana] vagy [Banana, Apple]
// set.get(1); // Fordítási hiba - nincs indexelés
}
}
Összehasonlító táblázat:
| Jellemző | List | Set |
|---|---|---|
| Sorrend | Garantált (hozzáadás sorrendje) | Nem garantált (HashSet esetén), rendezett (TreeSet) |
| Duplikátumok | Engedélyezett | Nem engedélyezett |
| Hozzáférés index szerint | Elérhető (get(int index)) |
Nem elérhető |
| Teljesítmény contains() | Átlagosan O(n) (ArrayList) | Átlagosan O(1) (HashSet) |
| Tipikus megvalósítások | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |