Sobes.tech
Junior

Фарқи байни интерфейсҳои List ва Set дар Java чист?

sobes.tech AI

Ҷавоб аз AI

Асосӣ фарқиятҳо байни интерфейсҳои List ва Set дар Java чунинанд:

  • Тартиби элементҳо:

    • List тартиби илова кардани элементҳоро нигоҳ медорад. Элементҳо индекс доранд, ки аз 0 оғоз мешаванд.
    • Set тартиби элементҳоро кафолат намедиҳад. Бархе амалишавиҳо (масалан, LinkedHashSet, TreeSet) метавонанд тартиби муайян дошта бошанд, аммо интерфейси Set онро талаб намекунад.
  • Дубляжҳо:

    • List иҷозат медиҳад, ки элементҳои дубляжӣ дошта бошанд.
    • Set иҷозат намедиҳад, ки элементҳои дубляжӣ дошта бошанд. Ҳангоми кӯшиши илова кардани дубляжӣ, амалия ё игнор карда мешавад ё false бармегардонад (ба вобаста аз амалишавӣ ва усул).
  • Камаронӣ:

    • Амали илова ва хориҷ кардани элемент дар маркази List метавонад нисбатан сусттар бошад (хусусан барои ArrayList) дар муқоиса бо Set.
    • Санҷиши мавҷудияти элемент (contains) дар Set, ки бар асоси хешингӣ (HashSet) аст, одатан тезтар аст (дар миёна O(1)) дар муқоиса бо List (дар миёна O(n)).
    • Амали асосёфта ба индекс (get, set) танҳо дар List дастрас аст.
  • Аммалишавиҳо:

    • Реализаҳои маъмулӣ барои List: ArrayList, LinkedList, Vector.
    • Реализаҳои маъмулӣ барои Set: HashSet, LinkedHashSet, TreeSet.

Масаланҳо, ки фарқиятҳоро нишон медиҳанд:

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 иҷозат медиҳад дубляж ва тартибро нигоҳ медорад
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Илова кардани дубляж
        System.out.println("List: " + list); // Натиҷа: [Apple, Banana, Apple]
        System.out.println("Элемент дар индекс 1: " + list.get(1)); // Дастрасӣ ба индекс

        // Set иҷозат намедиҳад дубляж ва тартиб кафолат намедиҳад (барои HashSet)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // кӯшиши илова кардани дубляж - игнор карда мешавад
        System.out.println("Set: " + set); // Натиҷа метавонад бошад [Apple, Banana] ё [Banana, Apple]
        // set.get(1); // Хатогӣ дар компиляция - дастрасӣ ба индекс нест
    }
}

Таблиғи муқоиса:

Хусусият List Set
Тартиб Гарантӣ (тартиби илова) Надорад (барои HashSet), тартиб дорад (TreeSet)
Дубляжҳо Иҷозат дорад Иҷозат намедиҳад
Дастрасӣ ба индекс Мумкин (get(int index)) Нест мумкин
Камаронӣ contains() O(n) дар миёна (барои ArrayList) O(1) дар миёна (барои HashSet)
Реализаҳои маъмул ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet