Java Map va Set

Map - bu kalitlarga asoslangan qiymatlar to’plami, kalit-qiymatlar juftligi. Har bir kalit va qiymat juftligi entry (element) deb nomlanadi. Map faqat takrorlanmas kalitlardan iborat bo’ladi. Map kalitlar asosida izlash, tahrirlash yoki o’chirish uchun juda qulay.

Mapda 2 ta interfeys: Map va SortedMap va 3 ta class: HashMap, LinkedHashMap va TreeMap mavjud:

Java Map Hierarchy

Map dublikat kalitlarni saqlamaydi, ammo qiymatlar takrorlanishi mumkin. HashMap va LinkedHashMap “null” kalit va qiymatlarni saqlashi mumkin, ammo TreeMap null kalit va qiymatlarni saqlashga ruxsat bermaydi.

  • HashMap - Map intefeysining implementatsiyasi, lekin u elementlarni hech bir tartibsiz saqlaydi.
  • LinkedHashMap - Map interfeysini implementatsiya qiladi va HashMap classidan meros oladi. U elementlarning qo’shilgan tartibini saqlaydi.
  • TreeMap - Map va SortedMap interfeyslarini implementatsiya qiladi. U kalitlarni o’sish tartibida saqlaydi.

Map interfeysining metodlari:

  • V put(Object key, Object value) - mapga entry qo’shadi (kalit-qiymat)
  • void putAll(Map map) - berilgan mapning barcha elementlarini joriy mapga qo’shadi
  • V putIfAbsent(K key, V value) - agar berilgan kalit mapda mavjud bo’lmasa, mapga berilgan kalit va qiymatni qo’shadi.
  • V remove(Object key) - berilgan kalitni mapdan o’chiradi
  • boolean remove(Object key, Object value) - berilgan kalit va berilgan qiymatni mapdan o’chiradi
  • Set keySet() - mapning barcha kalitlaridan iborat yangi Set obyekti qaytaradi
  • Set<Map.Entry<K,V>> entrySet() - mapning barcha kalitlaridan va qiymatlaridan iborat yangi Set obyekti qaytaradi
  • void clear() - mapdagi barcha elementlarni o’chiradi
  • boolean containsValue(Object value) - berilgan qiymat mapda mavjud bo’lsa true, aks holda false qiymat qaytaradi
  • boolean containsKey(Object key) - berilgan kalit mapda mavjud bo’lsa true, aks holda false qiymat qaytaradi
  • boolean equals(Object o) - berilgan Obyekt va joriy mapni taqqoslaydi
  • V get(Object key) - berilgan kalitga mos qiymatni qaytaradi
  • V getOrDefault(Object key, V defaultValue) - agar mapda berilgan kalit mavjud bo’lsa, unga mos qiymatni, aks holda berilgan default qiymatni qaytaradi
  • boolean isEmpty() - mapni bo’shlikka tekshiradi
  • V replace(K key, V value) - berilgan kalitga mos qiymatni yangisi bilan almashtiradi
  • boolean replace(K key, V oldValue, V newValue) - berilgan kalitga mos berilgan eski qiymatni berilgan yangi qiymatga almashtiradi
  • Collection values() - mapning barcha qiymatlaridan iborat to’plamni qaytaradi
  • int size() - mapdagi jami elementlar sonini qaytaradi

Map.Entry interfeysi - Mapning qism interfeysi bo’lib, mapning barcha elementlarini to’plam shaklida olish imkonini beradi. U mapning kalit va qiymatlarini olish uchun metodlarga ega.

Keling endi Map ga doir misollar ko’ramiz:

import java.util.*;

public class MapMisol {
   public static void main(String[] args) {
       Map<Integer, String> map = new HashMap<>();
       map.put(1, "uzbekdevs.uz");
       map.put(5, "blogpost.uz");
       map.put(2, "www.uz");
       map.put(6, "www.com");
       Set<Map.Entry<Integer, String>> set = map.entrySet();
       for (Map.Entry<Integer, String> entry : set) {
           System.out.println(entry.getKey() + " " + entry.getValue());
       }
   }
}

Konsulga quyidagilar chop etiladi:

1 uzbekdevs.uz 2 www.uz 5 blogpost.uz 6 www.com

Set - bu tartiblanmagan va takrorlanmas qiymatlardan iborat to’plam hisoblanadi.

Set in Java

Set interfeysini implementatsiya qiladigan asosiy classlar quyidagilar:

  • HashSet - hash jadvali strukturasida ishlaydi va elementlarni hashcode asosida saqlaydi. Elementlar tartibi bo’lmaydi va “null” qiymatlar ham saqlanishi mumkin.
  • EnumSet - enum (o’zgarmas) qiymatlarni saqlashga mo’ljallangan to’plam.
  • LinkedHashSet - elementlarni qo’shilgan tartibini saqlovchi to’plam.
  • TreeSet - daraxt strukturasida ishlaydi va elementlarni o’sish tartibida saqlaydi.

To’plamlar ustida amallar:

Matematikada to’plamlar ustida asosiy amallar hisoblangan kesishma, birlashma, ayirma kabi amallarni ko’rib chiqamiz. Keling bizda ikkita to’plam bo’lsin: set1 = [22, 45, 33, 66, 55, 34, 77] va set2 = [33, 2, 83, 45, 3, 12, 55].

  • Kesishma: ikkalar to’plamda ham mavjud elementlarni qaytaradi: set1 va set2 kesishmasi [33, 45, 55] bo’ladi.
  • Birlashma: ikkala to’plamdan kamida bittasida mavjud elementlarni qaytaradi: set1 va set2 birlashmasi [2, 3, 12, 22, 33, 34, 45, 55, 66, 77, 83] bo’ladi.
  • Ayirma: birinchi to’plamdan ikkinchi to’plamda ham mavjud elementlarni o’chiradi: set1 dan set2 ni ayirmasi [66, 34, 22, 77] bo’ladi.

Java dasturlash tilida Set interfeysida addAll() metodi birlashma amalini, retainAll() metodi kesishma amalini, va removeAll() metodi ayirma amalini bajaradi.

Quyidagi misolda Set interfeysini va uning asosiy amallarini tushunib olishga harakat qiling:

import java.util.*;
public class SetAmallari
{
   public static void main(String[] args)
   {
       Integer[] massiv1 = {22, 45,33, 66, 55, 34, 77};
       Integer[] massiv2 = {33, 2, 83, 45, 3, 12, 55};
       Set<Integer> set1 = new HashSet<>(Arrays.asList(massiv1));
       Set<Integer> set2 = new HashSet<>(Arrays.asList(massiv2));

       Set<Integer> birlashma = new HashSet<>(set1);
       birlashma.addAll(set2);
       System.out.print("Birlashma: ");
       System.out.println(birlashma);

       Set<Integer> kesishma = new HashSet<>(set1);
       kesishma.retainAll(set2);
       System.out.print("Kesishma: ");
       System.out.println(kesishma);

       Set<Integer> ayirma = new HashSet<>(set1);
       ayirma.removeAll(set2);
       System.out.print("Ayirma: ");
       System.out.println(ayirma);
   }
}  
Birlashma: [33, 66, 34, 2, 83, 3, 22, 55, 12, 45, 77] Kesishma: [33, 55, 45] Ayirma: [66, 34, 22, 77]