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 չի թույլ տալիս կրկնվող էլեմենտներ և կարգը չի երաշխավորվում (for 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
Կարգը Գերաշխավորված (ավելացման կարգը) Չգերաշխավորված (for HashSet), դասակարգված (for TreeSet)
Կրկնօրինակներ Թույլատրված Թույլատրված չէ
Մուտք ըստ ինդեքսի Միջնորդ (get(int index)) Չի հնարավոր
contains() արագություն O(n) միջինում (for ArrayList) O(1) միջինում (for HashSet)
Տիպիկ իրականացումներ ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet