Sobes.tech
Junior

Java-да қандай жинақ түрлері бар?

sobes.tech AI

AI-дан жауап

Java-да негізгі коллекция типтері J2SE Collections Framework-те ұсынылған және үш негізгі санатқа бөлінеді:

  1. Set:
    • Тәртіпсіз, қайталанбайтын коллекциялар.
    • Іске асырулар: HashSet, LinkedHashSet, TreeSet.
  2. List:
    • Тәртіпті коллекциялар, элементтер индекс бойынша қол жетімді. Қайталанулар болуы мүмкін.
    • Іске асырулар: ArrayList, LinkedList, Vector, Stack.
  3. Map:
    • "кілт-мән" жұптарын сақтайды. Кілттер бірегей, мәндер — жоқ. Элементтер белгілі бір тәртіпте сақталмайды (соның ішінде LinkedHashMap және TreeMap).
    • Іске асырулар: HashMap, LinkedHashMap, TreeMap, Hashtable.

Осы негізгі интерфейстерден (Set, List, Map) басқа да сирек қолданылатындары бар:

  • Queue: Элементтерді өңдеу үшін сақтайтын коллекция. Әдетте FIFO принципімен жұмыс істейді (бірінші келген — бірінші шығады).
    • Іске асырулар: PriorityQueue, ArrayDeque, LinkedList.
  • Deque: Екі жақты кезек, екі жағынан да элементтерді қосу және шығару қолдау көрсетеді.
    • Іске асырулар: ArrayDeque, LinkedList.

Collection абстрактілі класы көптеген коллекциялар иерархиясының түпкі интерфейсі болып табылады (Set, List, Queue). Map Collection-ды жүзеге асырмайды.

Қолдану мысалдары:

// ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Қайталау рұқсат етілген

// HashSet
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Ескерусіз қалады, себебі қайталанулар рұқсат етілмейді

// HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 1); // Мәндер бірдей болуы мүмкін

Нақты іске асыруды таңдау талап етілетін сипаттамаларға байланысты: тәртіпті сақтау қажеттілігі, қайталанулардың рұқсат етілуі, қол жетімділік және енгізу жылдамдығы, көп ағынды жұмыс істеу және т.б. Мысалы, ArrayList индекс бойынша жылдам қол жеткізу үшін ыңғайлы, LinkedList жиі енгізу/жою үшін, HashSet бірегей элементтерді жылдам іздеу үшін, ал HashMap кілт бойынша деректерді сақтау үшін қолайлы. Vector және Hashtable синхрондалған (жұмыс істеу қауіпсіз) жүзеге асырулар, бірақ әдетте синхрондау басқа деңгейде жүзеге асырылатын (ArrayList, HashMap) нұсқаларын пайдалану және синхрондауды басқа деңгейде қамтамасыз ету немесе java.util.concurrent пакетіндегі коллекциялар қолдану ұсынылады. LinkedHashSet және LinkedHashMap енгізу тәртібін сақтайды. TreeSet және TreeMap элементтерді сұрыпталған тәртіпте сақтайды. ArrayDeque көбінесе Stack және LinkedList-ке қарағанда стек немесе кезек ретінде қолданғанда жақсы өнімділік көрсетеді. PriorityQueue элементтерді олардың табиғи тәртібімен немесе Comparator көмегімен ұйымдастырады.