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,
HashMapkimi. - Yaddaş:
HashMapilə müqayisədə,LinkedHashMapelementlə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.