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 կեշեր իրականացնելու համար։