Sobes.tech
Junior

Java-ში List და Set ინტერფეისების განსხვავება რა არის?

sobes.tech AI

პასუხი AI-სგან

Javaда List һәм Set интерфейслары арасындагы төп аерма түбәндәгечә:

  • Элементлар тәртибе:

    • List элементларны өстәү тәртибен саклый. Элементларның индекслары бар, 0-дан башлана.
    • Set элементлар тәртибен гарантияләмәй. Кайбер реализацияләр (мәсәлән, LinkedHashSet, TreeSet) билгеле бер тәртипкә ия булырга мөмкин, ләкин Set интерфейсы моны таләп итми.
  • Күп тапкырлыклар:

    • List күп тапкырлы элементларны сакларга рөхсәт итә.
    • Set күп тапкырлы элементларны сакларга тыя. Кушу вакытында күп тапкырлы элемент өстәлсә, операция йә игнорлана, йә false кайтара (реализациягә һәм ысулга бәйле).
  • Үзгәрүчәнлек һәм тизлек:

    • List уртасында өстәү һәм бетерү операцияләре әкренрәк булырга мөмкин (аеруча ArrayList өчен), Set белән чагыштырганда.
    • Setтә элемент барлыгын тикшерү (contains) гадәттә тизрәк (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