Sobes.tech
Junior

LinkedHashMap ile hiç karşılaştınız mı?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, deneyimim var. Java ve Kotlin'de LinkedHashMap, Map arayüzünün bir uygulamasıdır. HashMap (ortalama O(1) anahtar erişimi) ve LinkedList (elemanların eklenme sırasını korur) özelliklerini birleştirir.

Ana özellikler:

  • Sıralamayı koruma: Öğelere yapılan yineleme, eklenme sırasına göre gerçekleşir.
  • Performans: Öğelerin eklenmesi, silinmesi ve aranması, HashMap gibi amortize edilmiş sabit bir karmaşıklıkla (O(1)) yapılır.
  • Hafıza: HashMap ile karşılaştırıldığında, LinkedHashMap bağlantıları saklamak için biraz daha fazla hafıza kullanır.
  • Erişim modu: Erişim sırasını koruyacak şekilde yapılandırılabilir (son kullanılan öğeler listenin sonuna taşınır), bu da en az kullanılanların (LRU - Least Recently Used) politikasıyla önbellekler uygulamak için faydalıdır.

LRU önbellekleri için kullanım örneği:

// Maksimum boyutu 5 olan bir önbellek oluşturuyoruz
// yapıcıda true erişim modunu etkinleştirir
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
        // Boyut 5'i aşarsa en eski öğeyi kaldır
        return size() > 5;
    }
};

lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // key1'e erişim, listenin sonuna taşınır
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Önbellek boyutu aşıyor, en eski (key2 veya erişim sonrası key3) silinir

System.out.println(lruCache);
// Erişim modu ile önbellek oluşturuyoruz (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
    override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
        // Boyut 5'i aşarsa en eski öğeyi kaldır
        return size > 5
    }
}

lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // key1'e erişim, listenin sonuna taşınır
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Boyut aşıyor, en eski silinir

println(lruCache)

LinkedHashMap, öğeler üzerinde yineleme sırası önemliyse ve basit LRU önbellekleri uygulamak için kullanışlıdır.