क्या ऐसी कोई तकनीक है कि मैं एक संख्या एन निर्दिष्ट कर सकता हूं कि जब (एन + 1) वें प्रविष्टि डाली जाती है, तो सबसे पुरानी प्रविष्टि को पहले यह सुनिश्चित किया जाता है कि हैशटेबल का आकार हमेशा एन तक सीमित है?मैं जावा हैशटेबल में प्रविष्टियों की संख्या को कैसे सीमित करूं?
उत्तर
शायद आप LRU cache खोज रहे हैं? यहां LinkedHashMap पर आधारित एक ब्लॉग पोस्ट है।
मैं यहां लिंक्ड हैशैप का उल्लेख करने आया हूं, जिसे मैंने हाल ही में एलआरयू कैश के लिए उपयोग किया था। –
आप अपाचे संग्रह का उपयोग करने पर विचार करना चाह सकते हैं। उनके पास एलआरयू कार्यान्वयन का एक गुच्छा है। अन्यथा, आप मानक पुस्तकालय संग्रह के लिए आसानी से एक समान रैपर लिख सकते हैं; मुझे नहीं लगता कि एक ऐसा है जिसका आप सीधे उपयोग कर सकते हैं।
आप डबल-एंडेड कतार, या Deque का उपयोग कर सकते हैं, और जब आप अधिकतम गणना पर हों तो केवल पहले आइटम को हटा दें।
यदि आप कैशिंग कर रहे हैं तो आप वीक हैशैप या वीक रेफरेंस का उपयोग कर सकते हैं और फिर कैश के आकार के बारे में चिंता करने की आवश्यकता नहीं है।
एक सामान्य गलतफहमी का प्रचार करने से बचने के लिए बस स्पष्ट करने के लिए: WeakHashMap स्वयं एलआरयू कैशिंग के लिए उपयुक्त नहीं है; यह कुंजी के लिए वीक संदर्भों का उपयोग करता है, न कि मूल्यों। यह उन वस्तुओं के बारे में मेटाडेटा रखने के लिए आदर्श है जो आपके लिए 'संबंधित' नहीं हैं; स्मृति समाप्त होने पर प्रविष्टियों को ग्रहण करने के लिए नहीं निकाला जाएगा – Cowan
LinkedHashMap ठीक है, removeEldestEntry विधि के लिए javadoc देखें।
Map map = new LinkedHashMap(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
आप हैं:
Map map = new LinkedHashMap() {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
तुम भी निर्माता में यह निर्दिष्ट करने के द्वारा सबसे पुराने पहुँचा प्रविष्टि निकाल सकते हैं:
कुछ इस तरह चाल करना चाहिए, इस सबसे पुराने डाला प्रविष्टि निकाल देंगे समेकन की जरूरत है, इस समस्या को हल करने की कोशिश मत करो। अमरूद की CacheBuilder में एक .maximumSize() विधि है जो आपको मानचित्र के आकार को सीमित करने की अनुमति देती है, हालांकि यह मेरी समझ है कि वास्तव में सीमा तक पहुंचने से पहले पुरानी प्रविष्टियां साफ़ की जा सकती हैं।
डेटा संरचना के डिजाइन पर an interesting page है, जो पाठक को प्रभावित करना चाहिए कि Google के कार्यान्वयन से बेहतर प्रदर्शन करना कितना मुश्किल होगा। :)
- 1. मैं SQL में फ़ील्ड मान प्रति पंक्तियों की संख्या को कैसे सीमित करूं?
- 2. मैं SPARQL क्वेरी में किसी विशिष्ट चर के लिए परिणामों की संख्या को कैसे सीमित करूं?
- 3. मैं पाइथन में सक्रिय धागे की संख्या को कैसे सीमित करूं?
- 4. log4j2 - लॉग फ़ाइलों की संख्या को सीमित
- 5. मैं हैशटेबल की चाबियों और मानों का आकलन कैसे करूं?
- 6. gsub का उपयोग करते समय मैं प्रतिस्थापन की संख्या को कैसे सीमित करूं?
- 7. इंटरबेज 7.1 के लिए लौटाए गए रिकॉर्ड्स की संख्या को मैं कैसे सीमित करूं?
- 8. मैं सिने के माध्यम से दर्ज वर्णों की संख्या को कैसे सीमित करूं?
- 9. मैं डबल के लिए मुद्रित दशमलव की संख्या को कैसे सीमित करूं?
- 10. मैं डीबीईटीई के साथ डीईएलटीई में पंक्तियों की संख्या कैसे सीमित करूं?
- 11. मैं UITextView में वर्णों को कैसे सीमित करूं?
- 12. मैं सी में सॉकेट गति को कैसे सीमित करूं?
- 13. हैशटेबल के जावा सरणी
- 14. JTextField: charaters की संख्या को सीमित करने के लिए कैसे?
- 15. जावा थ्रेड की अधिकतम संख्या पर बहुत सीमित है?
- 16. मैं विंडोज़ में डिस्प्ले की संख्या कैसे प्राप्त करूं?
- 17. दशमलव संख्या को सीमित कैसे करें?
- 18. मैं postgreSQL में किसी विशिष्ट कॉलम द्वारा परिणामों की संख्या को सीमित कैसे कर सकता हूं?
- 19. जावा में प्राथमिकता Queue कैसे डुप्लिकेट प्रविष्टियों की तरह है?
- 20. मैं matplotlib ग्राफ पर सीमा आकार को कैसे सीमित करूं?
- 21. असफल लॉगिन प्रयासों की संख्या सीमित करना
- 22. धागे की स्प्रिंग @Async संख्या सीमित
- 23. मैं PHP में एक संख्या को कैसे गोल करूं?
- 24. जावा में ConcurrentHashMap और हैशटेबल
- 25. मैं सकारात्मक संख्या को नकारात्मक में कैसे परिवर्तित करूं?
- 26. SQLite3 और परिणामों की संख्या को सीमित करने
- 27. मैं जावास्क्रिप्ट में किसी संख्या को कैसे गोल करूं?
- 28. मैं node.js में सर्वर से अपलोड की गति को कैसे सीमित करूं?
- 29. अपलोड की गई फ़ाइलों की संख्या को सीमित और सीमित करें (HTML फ़ाइल इनपुट)
- 30. जावा हैशटेबल 'put'
यह http://stackoverflow.com/questions/272674/what-is-a-data-structure-kind-of-like-a-hash-table-but-infrequently-used-keys के समान है -ar। सवाल एक समाधान प्रदान करता है। –
@robhruska - क्या आपको लगता है कि यह एक डुप्लिकेट के रूप में गिना जाता है? मैं बाड़ पर हूँ। –
मुझे यकीन नहीं है। दृष्टिकोण थोड़ा अलग हैं, क्योंकि यह प्रश्न "आकार सीमा" के बारे में पूछ रहा है, जबकि अन्य प्रश्न "निरंतर उपयोग" प्रविष्टियों को लक्षित करते हैं। मैं इसे खोलने का विरोध नहीं कर रहा हूं, अगर ऐसा है कि इस प्रश्न के कोण से इसे देखने वालों के लिए अधिक खोज योग्यता है। –