हैश मैप से अपनी स्थिति से तत्व कैसे पुनर्प्राप्त करें, क्या यह संभव है?क्या हैश मैप से तत्व को अपनी स्थिति से प्राप्त करना संभव है?
उत्तर
HashMaps आदेश को संरक्षित नहीं है:
इस वर्ग नक्शे के आदेश के रूप में कोई गारंटी नहीं देता; विशेष रूप से, यह गारंटी नहीं देता है कि आदेश समय के साथ स्थिर रहेगा।
LinkedHashMap पर एक नज़र डालें, जो एक अनुमानित पुनरावृत्ति आदेश की गारंटी देता है।
यह वास्तव में प्रश्न का उत्तर नहीं देता है। नीचे दिए गए अन्य उत्तर अधिक उपयोगी हैं। – forresthopkinsa
सम्मान के साथ, यह दस्तावेज उद्धृत करता है कि * सीधे * प्रश्न –
का उत्तर देता है भले ही आदेश समय के साथ स्थिर न हो, फिर भी किसी भी स्थिति में सदस्यों में से एक को पुनर्प्राप्त करना संभव हो सकता है। – Beginner
उपयोग LinkedHashMap
: मानचित्र इंटरफ़ेस का
हैश तालिका और लिंक की गई सूची कार्यान्वयन, उम्मीद के मुताबिक यात्रा आदेश के साथ। यह कार्यान्वयन हैश मैप से अलग है जिसमें यह अपनी सभी प्रविष्टियों के माध्यम से चलने वाली दोगुनी-लिंक्ड सूची बनाए रखता है।
हैश मैप - और अंतर्निहित डेटा संरचना - हैश टेबल, स्थिति की धारणा नहीं है। लिंक्डलिस्ट या वेक्टर के विपरीत, इनपुट कुंजी को 'बाल्टी' में बदल दिया जाता है जहां मान संग्रहीत होता है। इन बाल्टी को ऐसे तरीके से आदेश नहीं दिया जाता है जो हैश मैप इंटरफ़ेस के बाहर समझ में आता है और इस तरह, आपके द्वारा हैश मैप में डाले गए आइटम इस अर्थ में नहीं हैं कि आप अन्य डेटा संरचनाओं के साथ अपेक्षा करेंगे
हैश मैप की कोई अवधारणा नहीं है स्थिति की स्थिति में ऑब्जेक्ट प्राप्त करने का कोई तरीका नहीं है। मानचित्र में ऑब्जेक्ट्स सेट और कुंजी से प्राप्त होते हैं।
मैं 'स्थिति' द्वारा मान रहा हूं कि आप उस आदेश का जिक्र कर रहे हैं जिसमें आपने तत्वों को हैश मैप में डाला है। उस स्थिति में आप एक LinkedHashMap का उपयोग करना चाहते हैं। LinkedHashMap हालांकि एक एक्सेसर विधि प्रदान नहीं करता है; आप, HashMaps एक
तरहpublic Object getElementAt(LinkedHashMap map, int index) {
for (Map.Entry entry : map.entrySet()) {
if (index-- == 0) {
return entry.value();
}
}
return null;
}
स्थिति से उपयोग की अनुमति नहीं है लिखने के लिए की आवश्यकता होगी यह केवल हैश कोड के बारे में जानता है और और अगर यह कुंजी के हैश कोड गणना कर सकते हैं यह मान प्राप्त कर सकते हैं। TreeMaps ऑर्डर करने की धारणा है। Linkedhas नक्शे उस क्रम को संरक्षित करते हैं जिसमें उन्होंने मानचित्र दर्ज किया था।
एक लिंक्ड हैशैप का उपयोग करें और जब आपको स्थिति से पुनर्प्राप्त करने की आवश्यकता होती है, तो मानों को एक ArrayList में परिवर्तित करें।
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);
हैश मैप से चाबियों की एक प्रति को तुरंत चालू करने के लिए हमेशा की आवश्यकता है ?? – Richard
LinkedHashMap का उपयोग करें और इस फ़ंक्शन का उपयोग करें।
private LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
इस तरह परिभाषित करें और।
private Entry getEntry(int id){
Iterator iterator = map.entrySet().iterator();
int n = 0;
while(iterator.hasNext()){
Entry entry = (Entry) iterator.next();
if(n == id){
return entry;
}
n ++;
}
return null;
}
फ़ंक्शन चयनित प्रविष्टि को वापस कर सकता है।
यदि आप उस क्रम को बनाए रखना चाहते हैं जिसमें आपने मानचित्र में तत्व जोड़े हैं, तो के विपरीत LinkedHashMap
का उपयोग करें।
यहाँ एक दृष्टिकोण है कि आप नक्शे में अपने सूचकांक द्वारा एक मूल्य प्राप्त करने के लिए अनुमति देगा:
public Object getElementByIndex(LinkedHashMap map,int index){
return map.get((map.keySet().toArray())[ index ]);
}
सरलतम मुझे कहना होगा ... हर चीज को बदलने के बजाय, आप केवल कीसेट का उपयोग कर रहे हैं। शानदार – kirtan403
आप देखने के लिए ऐसा ही कुछ को लागू करने की कोशिश कर सकते हैं पर:
Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("juan", 2);
map.put("pedro", 3);
map.put("pablo", 5);
map.put("iphoncio",9)
List<String> indexes = new ArrayList<String>(map.keySet()); // <== Parse
System.out.println(indexes.indexOf("juan")); // ==> 0
System.out.println(indexes.indexOf("iphoncio")); // ==> 3
मैं उम्मीद है इससे आपका काम बनेगा।
एक और कामकाजी दृष्टिकोण नक्शा मानों को एक सरणी में बदल रहा है और फिर सूचकांक पर तत्व पुनर्प्राप्त कर रहा है। निम्नलिखित तरीकों का उपयोग कर 100 000 वस्तुओं की LinkedHashMap में सूचकांक खोजों द्वारा 100 000 तत्व के टेस्ट रन निम्न परिणाम को जन्म दिया:
//My answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.values().toArray(new Particle[map.values().size()])[index];
} //68 965 ms
//Syd Lambert's answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.get((map.keySet().toArray())[ index ]);
} //80 700 ms
सभी LinkedHashMap से सूचकांक द्वारा सभी को पुन: प्राप्त तत्व में बहुत भारी आपरेशन हो रहा है।
आप किसी कारण से, HashMap के साथ रहना है, तो आप कीसेट एक सरणी और सूचकांक के लिए कुंजी सरणी में मूल्यों को प्राप्त करने के लिए नक्शे में इतनी तरह परिवर्तित कर सकते हैं:
Object[] keys = map.keySet().toArray();
इसके बाद आप मानचित्र का उपयोग कर सकते हैं जैसे:
map.get(keys[i]);
ध्यान दें कि arr [i] में बदला जाना चाहिए: कुंजी [i] –
- 1. हैश मैप
- 2. जावा हैश मैप से एक अपरिवर्तनीय संग्रह कैसे प्राप्त करें?
- 3. हैश मैप
- 4. हैश मैप को ArrayList
- 5. AutoCompleteTextView onItem हैश मैप
- 6. क्या ज़िपिनट्रीस्ट्रीम से ज़िप्पेन्ट्री का इनपुटस्ट्रीम प्राप्त करना संभव है?
- 7. जावास्क्रिप्ट: मूल तत्व से संबंधित माउस स्थिति प्राप्त करें
- 8. XmlReader से वर्तमान स्थिति प्राप्त करना
- 9. हैश मैप
- 10. क्या INFORMATION_SCHEMA से तालिका प्रकार परिभाषाएं प्राप्त करना संभव है?
- 11. क्या javax.naming.InitialContext से "सबकुछ" प्राप्त करना संभव है?
- 12. हैश मैप
- 13. हैश मैप
- 14. क्या मूल्य से कतार तत्व को निकालना संभव है?
- 15. मैं हैश के हैश से मूल्यों को कैसे मैप (और सॉर्ट) कर सकता हूं?
- 16. क्या jQuery में किसी तत्व से जुड़ी घटनाओं की एक सूची प्राप्त करना संभव है?
- 17. हैश मैप जटिलता प्राप्त करें/डाल दें
- 18. हैश मैप
- 19. क्या वीबी .NET से सुरक्षित रूप से SecureString मान प्राप्त करना संभव है?
- 20. हैश मैप
- 21. हैश मैप
- 22. CUDA - डिवाइस हैश मैप लागू करना?
- 23. क्या ओबीजेसी से पाइथन मॉड्यूल को कॉल करना संभव है?
- 24. क्या ट्विटर एपीआई से यूआरएल को छोटा करना संभव है?
- 25. LinkedHashMap का कार्यान्वयन हैश मैप से अलग कैसे है?
- 26. क्या तत्व की स्थिति पूर्ण होने पर ब्राउज़र को फिर से प्रस्तुत करना है?
- 27. जावा कंसूरेंट हैश मैप
- 28. Iashating हैश मैप को क्रमशः
- 29. जावा, हैश मैप
- 30. हैश मैप प्रोफाइलिंग
"स्थिति" से आपका क्या मतलब है? हैशमैप्स का आदेश नहीं दिया जाता है, इसलिए उनके पास "स्थिति" की सामान्य धारणा नहीं होती है जिसे आप वेक्टर की तरह कुछ प्राप्त करेंगे। – Mat
क्या आपका मतलब इसके सम्मिलन आदेश या किसी अन्य आदेश से है? –
@ मार्क: सम्मिलन आदेश। – Eugene