Junior
Mis vahe on Java-s List ja Set liidestel?
sobes.tech AI
Vastus AI-lt
Java List ja Set liidestega peamised erinevused on järgmised:
-
Elementide järjekord:
Listsäilitab lisamise järjekorra. Elementidel on indeksid alates 0.Setei garanteeri elementide järjekorda. Mõned teostused (ntLinkedHashSet,TreeSet) võivad järjekorda omada, kuidSetliides seda ei nõua.
-
Kordused:
Listlubab dubleeritud elemente.Setei luba dubleeritud elemente. Kui proovite lisada dubleeritud elementi, siis operatsioon või ignoreeritakse või tagastabfalse(olenevalt teostusest ja meetodist).
-
Jõudlus:
Listkeskel lisamine ja eemaldamine võib olla aeglasem (eritiArrayList), võrreldesSet-iga.Set-iscontainskontroll on tavaliselt kiirem (HashSetpuhul keskmiselt O(1)), võrreldesList-iga (keskmiselt O(n)).- Indeksipõhised operatsioonid (
get,set) on saadaval ainultList-is.
-
Teostused:
- Tüüpilised
Listteostused:ArrayList,LinkedList,Vector. - Tüüpilised
Setteostused:HashSet,LinkedHashSet,TreeSet.
- Tüüpilised
Siin on näited, mis illustreerivad erinevusi:
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 lubab dubleeritud elemente ja säilitab järjekorra
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Dubleeritud elemendi lisamine
System.out.println("List: " + list); // Väljund: [Apple, Banana, Apple]
System.out.println("Indeks 1 element: " + list.get(1)); // Juurdepääs indeksiga
// Set ei luba dubleeritud elemente ja järjekord ei ole garanteeritud (HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Dubleeritud elemendi lisamise katse - ignoreeritakse
System.out.println("Set: " + set); // Näiteks [Apple, Banana] või [Banana, Apple]
// set.get(1); // Kompileerimisviga - juurdepääs indeksiga pole võimalik
}
}
Võrdlustabel:
| Omadus | List | Set |
|---|---|---|
| Järjekord | Garantii (lisamise järjekord) | Ei garanteeri (HashSet), sorteeritud (TreeSet) |
| Dubleeritud | Lubatud | Keelatud |
| Juurdepääs indeksiga | Võimalik (get(int index)) |
Ei ole võimalik |
| contains() kiirus | O(n) keskmiselt (ArrayList) | O(1) keskmiselt (HashSet) |
| Tüüpilised teostused | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |