का उपयोग करके LinkedHashMap में कुंजी/मान की स्थिति कैसे प्राप्त करें हाय मेरे पास एक LinkedHashMap (जानकारी कहा जाता है) जिसमें नाम/आयु (स्ट्रिंग/int) जोड़े शामिल हैं। मैं जानना चाहता हूं, अगर मैं कुंजी इनपुट करता हूं तो मुझे कुंजी/मूल्य की स्थिति कैसे प्राप्त हो सकती है। उदाहरण के लिए, यदि मेरा लिंक्ड हैशैप इस तरह दिखता है {bob = 12, jeremy = 42, carly = 21} और मैं जेरेमी खोजना चाहता था, तो इसे 1 स्थिति में 1 के रूप में वापस करना चाहिए। मुझे उम्मीद थी कि मैं info.getIndex जैसे कुछ का उपयोग कर सकता हूं ("जेरेमी")इसकी कुंजी
उत्तर
HashMap
सामान्य रूप से कार्यान्वयन Iteration
के लिए अनुक्रमित नहीं हैं।
LinkedHashMap
predictablelyIteration
(प्रविष्टि आदेश में) के लिए आदेश दिया है, लेकिन List
इंटरफेस और एक LinkedList
(जो क्या कुंजी सेट प्रविष्टि आदेश में दर्पण है) का खुलासा नहीं करता सूचकांक स्थिति में ही ट्रैक नहीं करता है या तो, यह बहुत in- है सूचकांक को खोजने के लिए भी कुशल। LinkedHashMap
आंतरिक LinkedList
के संदर्भ का खुलासा नहीं करता है।
वास्तविक "लिंक किए गए सूची" व्यवहार कार्यान्वयन विशिष्ट है। कुछ वास्तव में
LinkedList
के उदाहरण का उपयोग कर सकते हैं कुछ लोगों के पासEntry
पिछले और अगलेEntry
ट्रैक करें और इसका उपयोग कार्यान्वयन के रूप में करें। स्रोत को देखे बिना कुछ भी न मानें।
KeySet
कि चाबी क्योंकि हैशिंग विरासत में मिला HashMap
के समर्थन डेटा संरचना में प्लेसमेंट के लिए इस्तेमाल किया एल्गोरिदम के आदेश की गारंटी नहीं है और साथ ही होता है। तो आप इसका उपयोग नहीं कर सकते।
अपना खुद का कार्यान्वयन लिखने के बिना ऐसा करने का एकमात्र तरीका Iterator
पर चलना है जो LinkedList
मिररिंग का उपयोग करता है और जहां आप हैं, वहां एक गिनती रखें, यह बड़े डेटा सेट के साथ बहुत ही कुशल होगा।
समाधान
यह लग रहा है क्या की तरह आप चाहते हैं मूल प्रविष्टि आदेश में सूचकांक पदों है, तो आप एक ArrayList
की तरह कुछ में KeySet
में कुंजी को प्रतिबिंबित करने के लिए होता है करने के लिए अद्यतन के साथ समन्वयन में रखें HashMap
और स्थिति खोजने के लिए इसका इस्तेमाल करें। HashMap
का उप-वर्ग बनाना, IndexedHashMap
कहें और ArrayList
आंतरिक रूप से जोड़कर .getKeyIndex(<K> key)
जोड़ना जो आंतरिक ArrayList
.indexOf()
पर प्रतिनिधि शायद इस बारे में जाने का सबसे अच्छा तरीका है।
यह LinkedHashMap
है, लेकिन LinkedList
ArrayList
के बजाय KeySet
प्रतिबिंबित करता है।
मैंने सोचा कि LinkedHashMap आदेश बरकरार रखता है। क्या कोई ऐसी चीज है जिसका मैं उपयोग कर सकता हूं जो कुंजी/मूल्य स्टोर कर सकता है लेकिन ऑर्डर बनाए रख सकता है? – Matt9Atkins
यह बरकरार रहता है, * ऑर्डर * लेकिन * स्थिति * ट्रैक नहीं करता है। –
@ हर्नान ने प्रश्न और उत्तर के लिए उत्तर पढ़ा, वे स्थिति को भी ट्रैक करना चाहते हैं, जिसे मैं अपने उत्तर में विस्तार से बताता हूं। –
लिंक्ड हैशैप में "अनुमानित पुनरावृत्ति आदेश" (javadoc) है। आइटम उनके स्थान को नहीं जानते हैं, हालांकि, आपको इसे प्राप्त करने के लिए संग्रह को फिर से शुरू करना होगा। यदि आप एक बड़ा नक्शा बनाए रखते हैं तो आप भंडारण के लिए एक अलग संरचना का उपयोग करना चाह सकते हैं।
संपादित करें: स्पष्ट किया यात्रा
* "कुंजी 'सेट' चलना आपको कोई अच्छा नहीं करेगा, इसे 'सेट' द्वारा समर्थित किया जाता है, और यह अन-आदेश दिया जाता है। 'लिंक्डलिस्ट' का उपयोग केवल 'इटरेटर' के लिए किया जाता है। [जब संदेह होता है स्रोत का उपयोग करें] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java#HashMap.keySet%28%29)। –
दरअसल, मेरा मतलब एंट्री सेट था। यही कारण है कि एक पुनरावृत्ति ऑर्डर बिट उद्धृत ... अंतर्निहित इटरेटर उपयोग। मेरे हिस्से पर शब्दों की खराब पसंद। –
जावाडोक में पहला पैराग्राफ कहता है कि यह सम्मिलित क्रम में है, जो उसने पूछा के लिए। मुझे लगता है कि हम वही बात कह रहे हैं, वैसे भी। संपादनों ने आपका उत्तर स्पष्ट कर दिया है। –
आप गूगल अमरूद पुस्तकालय से com.google.common.collect.LinkedListMultimap
उपयोग कर सकते हैं।आपको इस कक्षा के बहुमूल्य व्यवहार की आवश्यकता नहीं है जो आप चाहते हैं कि keys()
विधि गारंटी देता है कि वे सम्मिलन आदेश में वापस लौटाए जाते हैं और फिर सूची बनाने के लिए उपयोग किया जा सकता है, आप आवश्यक सूचकांक स्थिति
indexOf()
का उपयोग कर सकते हैं
int pos = new ArrayList<String>(info.keySet()).indexOf("jeremy")
अफिक 'कीसेट()' ऑर्डर गारंटी नहीं है। – membersound
- 1. इसकी लंबाई COBOL
- 2. कुंजी
- 3. रेडिस: क्या इसकी कुंजी से सेट का केवल एक मान प्राप्त करना संभव है?
- 4. SwingUtilities.invokeLater() इसकी आवश्यकता क्यों है?
- 5. एफपीएस इसकी गणना कैसे करें?
- 6. बैकबोन.जेएस और इसकी एपीआई भ्रम
- 7. इसकी संभव शुद्ध एचटीएमएल 5
- 8. इसकी ऊंचाई एक बार 0
- 9. vhost.exe। इसकी आवश्यकता क्यों है?
- 10. Grails/Groovy - डोमेन ऑब्जेक्ट - इसकी प्रॉपर्टी का मानचित्र
- 11. प्राथमिक कुंजी, अद्वितीय कुंजी और उम्मीदवार कुंजी
- 12. कुंजी दबाएं कुंजी दबाएं
- 13. जावा कुंजी - कुंजी मानचित्र
- 14. सिक्योररैंडम: एक बार या हर बार इसकी आवश्यकता होती है?
- 15. इकाइयों को हटाने और इसकी नेविगेशन गुण
- 16. तुलना संख्या और इसकी स्ट्रिंग प्रस्तुति
- 17. हास्केल: सूची संलयन, इसकी आवश्यकता कहाँ है?
- 18. बैश बूलियन अभिव्यक्ति और इसकी मान असाइनमेंट
- 19. इंटरफ़ेस अन्य इंटरफेस फैली लेकिन इसकी तरीकों
- 20. jQuery। एलिमेंट चौड़ाई इसकी मूल चौड़ाई
- 21. एक बफर और इसकी संबंधित फ़ाइल
- 22. stdafx.h: मुझे इसकी आवश्यकता कब होगी?
- 23. पेपैल: pixel.gif - क्या मुझे इसकी आवश्यकता है?
- 24. एचटीएमएल शरीर इसकी सामग्री से छोटी है
- 25. अनावश्यक रूप से इसकी अधिकतम चौड़ाई
- 26. गोरा और इसकी विशेषताएं क्या हैं?
- 27. tmPlot नामस्थान में है, लेकिन इसकी निर्भरता
- 28. पोस्टफिक्स इसकी स्थापित लेकिन मैं कैसे
- 29. एचटीएमएल पेज और इसकी सामग्री डाउनलोड करें
- 30. phpinfo() को इसकी जानकारी कहां मिलती है?
देखें [क्यों-नहीं-linkedhashmap-provide-access-by-index] (http://stackoverflow.com/questions/5666820/why-doesnt-linkedhashmap-provide-access-by-index) – nawfal