Sobes.tech
Junior

LinkedHashMap ilə işlədinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, təcrübəm var. Java və Kotlin-də LinkedHashMap Map interfeysinin bir tətbiqidir. O, HashMap (orta hesabla O(1) açar ilə sürətli giriş) və LinkedList (elementlərin əlavə olunma ardıcıllığını saxlayır) xüsusiyyətlərini birləşdirir.

Əsas xüsusiyyətlər:

  • Ardıcıllığın saxlanması: Elementlər üzərində təkrarlama əlavə olunma ardıcıllığında həyata keçirilir.
  • Performans: Elementlərin əlavə olunması, silinməsi və axtarışı amortizasiya olunmuş sabit mürəkkəbliklə (O(1)) həyata keçirilir, HashMap kimi.
  • Yaddaş: HashMap ilə müqayisədə, LinkedHashMap elementlər arasındakı əlaqələri saxlamaq üçün bir az daha çox yaddaş istifadə edir.
  • Giriş rejimi: Giriş ardıcıllığını saxlamaq üçün konfiqurasiya oluna bilər (ən çox istifadə olunan elementlər siyahının sonuna köçürülür), bu isə ən az istifadə olunanların (LRU - Least Recently Used) siyasəti ilə sadə keşiklərin həyata keçirilməsi üçün faydalıdır.

LRU keşik üçün istifadə nümunəsi:

// Maksimal ölçüsü 5 olan keşik yaradırıq
// konstruktorunda true giriş rejimini aktivləşdirir
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
        // Ölçü 5-dən çox olarsa, ən köhnə elementi silir
        return size() > 5;
    }
};

lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // key1-ə giriş, sona köçürülür
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Keşik ölçüsü aşır, ən köhnə (key2 və ya key3, girişə görə) silinir

System.out.println(lruCache);
// Giriş rejimi ilə keşik yaradırıq (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
    override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
        // Ölçü 5-dən çox olarsa, ən köhnə elementi silir
        return size > 5
    }
}

lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // key1-ə giriş, sona köçürülür
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Ölçü aşır, ən köhnə silinir

println(lruCache)

LinkedHashMap elementlərin təkrarlanma ardıcıllığının vacib olduğu hallarda və sadə LRU keşiklərinin həyata keçirilməsi üçün faydalıdır.