Sobes.tech
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:

    • List säilitab lisamise järjekorra. Elementidel on indeksid alates 0.
    • Set ei garanteeri elementide järjekorda. Mõned teostused (nt LinkedHashSet, TreeSet) võivad järjekorda omada, kuid Set liides seda ei nõua.
  • Kordused:

    • List lubab dubleeritud elemente.
    • Set ei luba dubleeritud elemente. Kui proovite lisada dubleeritud elementi, siis operatsioon või ignoreeritakse või tagastab false (olenevalt teostusest ja meetodist).
  • Jõudlus:

    • List keskel lisamine ja eemaldamine võib olla aeglasem (eriti ArrayList), võrreldes Set-iga.
    • Set-is contains kontroll on tavaliselt kiirem (HashSet puhul keskmiselt O(1)), võrreldes List-iga (keskmiselt O(n)).
    • Indeksipõhised operatsioonid (get, set) on saadaval ainult List-is.
  • Teostused:

    • Tüüpilised List teostused: ArrayList, LinkedList, Vector.
    • Tüüpilised Set teostused: HashSet, LinkedHashSet, TreeSet.

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