Junior
Оё ягон вақт бо LinkedHashMap кор кардаед?
sobes.tech AI
Ҷавоб аз AI
Бале, ман бо дучор кардам. LinkedHashMap дар Java ва Kotlin ин имплементацияи интерфейси Map аст. Он хосиятҳои HashMap (рассоми зуд бо калид O(1) дар миёна) ва LinkedList (захира кардани тартиби илова кардани элементҳо) -ро дар бар мегирад.
Хусусиятҳои асосӣ:
- Захира кардани тартиб: Итеросия дар бораи элементҳо дар тартиби илова кардан сурат мегирад.
- Кунҷоиш: Илова кардан, тоза кардан ва ҷустуҷӯи элементҳо бо мурури амортизатсионӣ (O(1)), монанди
HashMap. - Ёдгирӣ: Дар муқоиса бо
HashMap,LinkedHashMapкаме бештар ёдгирӣ мекунад барои нигоҳ доштани пайвандҳо байни элементҳо. - Режими дастрасӣ: Мумкин аст ба нигоҳ доштани тартиби дастрасӣ танзим карда шавад (элементҳои охирин истифодашуда ба охир ҳаракат мекунанд), ки барои татбиқи кэшҳо бо сиёсати истифодаи камтар (LRU - Least Recently Used) муфид аст.
Маслиҳат барои истифодаи LRU-кэш:
// Таҳия кардани кэш бо андозаи максималӣ 5
// true дар конструктор режими дастрасиро фаъол мекунад
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Тоза кардани элементи қадимтар агар андозаи он аз 5 зиёд шавад
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Дастрасӣ ба key1, он ба охир ҳаракат мекунад
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Кэш аз андоза мегузарад, элементи қадимтар тоза мешавад (key2, агар бе дастрасӣ; key3, агар бо дастрасӣ ба key1)
System.out.println(lruCache);
// Таҳия кардани кэш бо режими дастрасӣ (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Тоза кардани элементи қадимтар агар андозаи он аз 5 зиёд шавад
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Дастрасӣ ба key1, он ба охир ҳаракат мекунад
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Кэш аз андоза мегузарад, элементи қадимтар тоза мешавад
println(lruCache)
LinkedHashMap барои вақте ки тартиби итеросия муҳим аст ва инчунин барои татбиқи кэшҳои оддӣ бо сиёсати LRU муфид аст.