Junior
Vai esat kādreiz strādājis ar LinkedHashMap?
sobes.tech AI
Atbilde no AI
Jā, esmu ar to saskāries. LinkedHashMap Java un Kotlinā ir Map saskarnes realizācija. Tā apvieno HashMap īpašības (ātra piekļuve pēc atslēgas O(1) vidēji) un LinkedList (saglabā elementu ievietošanas kārtību).
Galvenās īpašības:
- Kārtības saglabāšana: Iterācija caur elementiem notiek to pievienošanas kārtībā.
- Veiktspēja: Pievieno, dzēš un meklē elementus ar amortizētu konstantiem sarežģītību (O(1)), kā
HashMap. - Atmiņa: Salīdzinot ar
HashMap,LinkedHashMapizmanto nedaudz vairāk atmiņas, lai saglabātu saites starp elementiem. - Piekļuves režīms: To var iestatīt uz piekļuves kārtības saglabāšanu (nesen izmantotie elementi tiek pārvietoti uz beigām), kas ir noderīgi īslaicīgo kešatmiņu ar politiku mazāk izmantoto (LRU - Least Recently Used) ieviešanai.
Piemērs LRU kešatmiņai:
// Izveidojam kešatmiņu ar maksimālo izmēru 5
// true konstruktorā ieslēdz piekļuves režīmu
LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
// Noņemam vecāko elementu, ja izmērs pārsniedz 5
return size() > 5;
}
};
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
System.out.println(lruCache.get("key1")); // Piekļuve key1, tas tiek pārvietots uz beigām
lruCache.put("key4", "value4");
lruCache.put("key5", "value5");
lruCache.put("key6", "value6"); // Kešatmiņa pārsniedz izmēru, tiek izņemts vecākais (key2, ja bez piekļuves; key3, ja ar piekļuvi pie key1)
System.out.println(lruCache);
// Izveidojam ar piekļuves režīmu (true)
val lruCache = object : LinkedHashMap<String, String>(5, 0.75f, true) {
override fun removeEldestEntry(eldest: Map.Entry<String, String>?): Boolean {
// Noņemam vecāko elementu, ja izmērs pārsniedz 5
return size > 5
}
}
lruCache["key1"] = "value1"
lruCache["key2"] = "value2"
lruCache["key3"] = "value3"
println(lruCache["key1"]) // Piekļuve key1, tas tiek pārvietots uz beigām
lruCache["key4"] = "value4"
lruCache["key5"] = "value5"
lruCache["key6"] = "value6" // Kešatmiņa pārsniedz izmēru, tiek izņemts vecākais
println(lruCache)
LinkedHashMap ir noderīga, kad ir svarīga iterācijas kārtība, kā arī vienkāršai LRU kešatmiņu īstenošanai.