Sobes.tech
Junior

LinkedHashMap bilan ishlagansizmi?

sobes.tech AI

AIdan javob

Ha, tajribam bor. Java va Kotlin'da LinkedHashMap - bu Map interfeysining amalga oshirilishi. U HashMap (kalit bo'yicha tezkor kirish O(1) o'rtacha) va LinkedList (elementlar qo'shilish tartibini saqlaydi) xususiyatlarini birlashtiradi.

Asosiy xususiyatlar:

  • Tartibni saqlash: Elementlar bo'yicha takrorlash qo'shilish tartibida amalga oshiriladi.
  • Ishlash tezligi: Elementlarni qo'shish, o'chirish va qidirish amortizatsiyalashgan doimiy murakkablik bilan (O(1)) amalga oshiriladi, HashMap kabi.
  • Xotira: HashMap bilan solishtirganda, LinkedHashMap elementlar o'rtasidagi bog'lanishni saqlash uchun biroz ko'proq xotira ishlatadi.
  • Kirish rejimi: Kirish tartibini saqlash uchun sozlanishi mumkin (so'nggi foydalanilgan elementlar ro'yxat oxiriga ko'chiriladi), bu esa kam foydalaniladigan elementlarni chiqarish siyosati bilan (LRU - Least Recently Used) oddiy keshlarni amalga oshirish uchun foydalidir.

LRU kesh uchun foydalanish misoli:

// Maksimal o'lchami 5 bo'lgan kesh yaratamiz
// konstruktorda true kirish rejimini yoqadi
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
        // O'lcham 5 dan oshsa, eng eski elementni o'chiradi
        return size() > 5;
    }
};

lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // key1 ga kirish, oxiriga ko'chiriladi
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // O'lcham 5 dan oshadi, eng eski (key2 yoki key3ga kirish bo'yicha) o'chiriladi

System.out.println(lruCache);
// Kirish rejimi bilan kesh yaratamiz (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
    override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
        // O'lcham 5 dan oshsa, eng eski elementni o'chiradi
        return size > 5
    }
}

lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // key1 ga kirish, oxiriga ko'chiriladi
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // O'lcham 5 dan oshadi, eng eski element o'chiriladi

println(lruCache)

LinkedHashMap elementlar bo'yicha takrorlash tartibi muhim bo'lsa, shuningdek, oddiy LRU keshlarni amalga oshirish uchun foydalidir.