2011-08-30 21 views
7

आप LinkedHashMap को कैसे घटा सकते हैं? मैं removeEldestEntry विधि को ओवरराइड करता हूं, लेकिन यह विधि केवल तभी कॉल की जाती है जब कोई नया मान डाला जाता है। तो मानचित्र को इस तरह से छोटा बनाने में कोई बदलाव नहीं है।जावा में लिंक्ड हैशैप हटाना

LinkedHashMap केवल मेरे एक सामान्य Iterator देता है और किसी भी removeLast या listIterator विधि नहीं है, तो आप पिछले, का कहना है कि 1000, प्रविष्टियों की खोज और उन्हें हटा सकता हूँ?

एकमात्र तरीका जिसे मैं सोच सकता हूं वह पूरी चीज के माध्यम से चल रहा है। लेकिन इसमें उम्र लग सकती है ...

हर बार जब मैं केवल कुछ तत्वों को हटाना चाहता हूं तो एक नया नक्शा बनाना भी स्मृति को नष्ट कर देगा।

शायद Iterator के पहले मानों को हटाएं और फिर उन्हें फिर से सम्मिलित करें, removeEldestEntry विधि में कम हो गया था। फिर पुनर्वितरण सबसे पुराना मूल्य निकाल देगा। यह बहुत बदसूरत कोड है ... कोई बेहतर विचार?

संपादित करें: पुनरावृत्ति आदेश सबसे पुराना सबसे पुराना है। तो यह आसान है

उत्तर

5

Iterator LinekdHashMap के लिए सबसे पुराना से सबसे पुराना होगा। यदि आप LinkedHashMap को आकार में छोटा करना चाहते हैं तो आप निम्न का उपयोग कर सकते हैं।

Map<K,V> lhm = 
int desiredSize = 
for(Iterator iter = lhm.keySet().iterator();iter.hasNext()) { 
    if(lhm.size() <= desiredSize) break; 
    iter.remove(); 
} 

इसमें प्रति प्रविष्टि लगभग 20 एनएस निकालना चाहिए।

संबंधित मुद्दे