Sobes.tech
Junior

Java-da List və Set interfeysləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da ListSet interfeyslərinin əsas fərqləri aşağıdakılardır:

  • Elementlərin sırası:

    • List elementlərin əlavə olunma sırasını saxlayır. Elementlər indekslərə malikdir və 0-dan başlayır.
    • Set elementlərin sırasını təmin etmir. Bəzi tətbiqlər müəyyən bir sıralama ilə ola bilər (məsələn, LinkedHashSet, TreeSet), lakin Set interfeysi bunu tələb etmir.
  • Təkrarlanan elementlər:

    • List təkrarlanan elementlərə icazə verir.
    • Set təkrarlanan elementlərin olmasına icazə vermir. Təkrarlanan element əlavə etməyə çalışanda, əməliyyat ya nəzərə alınmır, ya da false qaytarır (tətbiq və metoddan asılı olaraq).
  • Performans:

    • List-də element əlavə etmə və silmə əməliyyatları, xüsusən ArrayList üçün, Set-ə nisbətən daha yavaş ola bilər.
    • Set-də (HashSet kimi) elementin mövcud olub-olmamasını yoxlama (contains) adətən daha sürətlidir (orta hesabla O(1)) müqayisədə List-lə (orta hesabla O(n)).
    • İndeksə əsaslanan əməliyyatlar (get, set) yalnız List-də mövcuddur.
  • Tətbiqlər:

    • Tipik List tətbiqləri: ArrayList, LinkedList, Vector.
    • Tipik Set tətbiqləri: HashSet, LinkedHashSet, TreeSet.

Aşağıda fərqləri göstərən nümunələr var:

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 təkrarlanan elementlərə icazə verir və sırasını saxlayır
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Təkrarlanan əlavə edildi
        System.out.println("List: " + list); // [Apple, Banana, Apple] göstərəcək
        System.out.println("İndeks 1-dəki element: " + list.get(1)); // İndeksə görə giriş

        // Set təkrarlanan elementlərə icazə vermir və sırası təmin edilmir (HashSet üçün)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // Təkrarlanan əlavə etməyə cəhd - ignor ediləcək
        System.out.println("Set: " + set); // [Apple, Banana] və ya [Banana, Apple] kimi göstərəcək
        // set.get(1); // Kompilyasiya xətası - indekslə giriş mümkün deyil
    }
}

Müqayisə cədvəli:

Xüsusiyyət List Set
Sıra Garantili (əlavə olunma sırası) Garantili deyil (HashSet üçün, TreeSet sıralı)
Təkrarlananlar İcazə verilir İcazə verilmir
İndeks ilə giriş Mümkün (get(int index)) Mümkün deyil
contains() performansı O(n) orta (ArrayList üçün) O(1) orta (HashSet üçün)
Tipik tətbiqlər ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet