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ı,
HashMapgibi amortize edilmiş sabit bir karmaşıklıkla (O(1)) yapılır. - Hafıza:
HashMapile karşılaştırıldığında,LinkedHashMapbağ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.