Sobes.tech
Junior

Java'da List va Set interfeyslari o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Java'da List va Set interfeyslarining asosiy farqlari quyidagilardan iborat:

  • Elementlar tartibi:

    • List elementlarning qo'shilish tartibini saqlaydi. Elementlar indekslarga ega bo'lib, 0 dan boshlanadi.
    • Set elementlarning tartibini kafolatlamaydi. Ba'zi implementatsiyalar ma'lum tartibga ega bo'lishi mumkin (masalan, LinkedHashSet, TreeSet), ammo Set interfeysi buni talab qilmaydi.
  • Takroriylik:

    • List takroriy elementlarni saqlashga ruxsat beradi.
    • Set takroriy elementlarni saqlashga ruxsat bermaydi. Takroriy element qo'shishga harakat qilinganda, operatsiya yoki ignor qilinadi yoki false qaytaradi (implementatsiya va metodga qarab).
  • Performans:

    • List ichida element qo'shish va o'chirish operatsiyalari, ayniqsa ArrayList uchun, Set ga qaraganda sekinroq bo'lishi mumkin.
    • Setda (HashSet kabi) element mavjudligini tekshirish (contains) odatda tezroq (o'rtacha O(1)) bo'ladi, List bilan solishtirganda (o'rtacha O(n)).
    • Indeksga asoslangan operatsiyalar (get, set) faqat Listda mavjud.
  • Implementatsiyalar:

    • Tipik List implementatsiyalari: ArrayList, LinkedList, Vector.
    • Tipik Set implementatsiyalari: HashSet, LinkedHashSet, TreeSet.

Quyida farqlarni ko'rsatadigan misollar keltirilgan:

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 takroriy elementlarga ruxsat beradi va tartibni saqlaydi
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Takroriy element qo'shildi
        System.out.println("List: " + list); // [Apple, Banana, Apple] chiqaradi
        System.out.println("Indeks 1 dagi element: " + list.get(1)); // Indeks bo'yicha kirish

        // Set takroriy elementlarga ruxsat bermaydi va tartib kafolatlanmaydi (HashSet uchun)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // Takroriy element qo'shishga urinish - ignor qilinadi
        System.out.println("Set: " + set); // [Apple, Banana] yoki [Banana, Apple] ko'rinishida chiqadi
        // set.get(1); // Kompilyatsiya xatosi - indeks bilan kirish mumkin emas
    }
}

Taqqoslash jadvali:

Xususiyat List Set
Tartib Garantili (qo'shish tartibi) Garantili emas (HashSet uchun, TreeSet tartiblangan)
Takroriylik Ruxsat etilgan Ruxsat etilmagan
Indeks bilan kirish Mümkin (get(int index)) Mümkin emas
contains() performansi O(n) o'rtacha (ArrayList uchun) O(1) o'rtacha (HashSet uchun)
Tipik implementatsiyalar ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet