Sobes.tech
Junior

Kāda ir atšķirība starp interfeisiem List un Set Java?

sobes.tech AI

Atbilde no AI

Galvenās atšķirības starp Java List un Set saskarnēm ir šādas:

  • Elementu kārtība:

    • List saglabā pievienošanas kārtību. Elementiem ir indeksi, sākot no 0.
    • Set negarantē elementu kārtību. Dažas realizācijas (piemēram, LinkedHashSet, TreeSet) var būt ar noteiktu kārtību, bet Set saskarne to neprasa.
  • Dublikāti:

    • List ļauj glabāt dublētus elementus.
    • Set neļauj glabāt dublētus elementus. Mēģinot pievienot dublētu elementu, operācija vai tiek ignorēta, vai atgriež false (atkarībā no realizācijas un metodes).
  • Veiktspēja:

    • Operācijas pievienošana un dzēšana List vidū var būt lēnāka (īpaši ArrayList), salīdzinot ar Set.
    • Pārbaude, vai elements ir (contains) Set, balstīta uz hashēšanu (HashSet), parasti ir ātrāka (vidēji O(1)), salīdzinot ar List (vidēji O(n)).
    • Operācijas, kas balstītas uz indeksu (get, set), ir pieejamas tikai List.
  • Realizācijas:

    • Tipiskas List realizācijas: ArrayList, LinkedList, Vector.
    • Tipiskas Set realizācijas: HashSet, LinkedHashSet, TreeSet.

Šeit ir piemēri, kas ilustrē atšķirības:

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 ļauj dublētus elementus un saglabā kārtību
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Dublēta elementa pievienošana
        System.out.println("List: " + list); // Izvadīs [Apple, Banana, Apple]
        System.out.println("Indekss 1: " + list.get(1)); // Pieeja pēc indeksa

        // Set neļauj dublētus elementus un kārtība nav garantēta (HashSet)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // Mēģinājums pievienot dublētu elementu - tiks ignorēts
        System.out.println("Set: " + set); // Izvadīs kaut ko līdzīgu [Apple, Banana] vai [Banana, Apple]
        // set.get(1); // Kompilācijas kļūda - nav pieejas pēc indeksa
    }
}

Salīdzināšanas tabula:

Īpašība List Set
Kārta Garantēta (pievienošanas kārta) Nav garantēta (HashSet), sakārtota (TreeSet)
Dublikāti Atļauti Nav atļauti
Pieejas pēc indeksa Iespējama (get(int index)) Nav iespējama
contains() veiktspēja O(n) vidēji (ArrayList) O(1) vidēji (HashSet)
Tipiskas realizācijas ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet