2014-10-07 7 views
52

नीचे मान हैं HashMap में शामिलHashMap - हो रही पहली कुंजी मूल्य

statusName {Active=33, Renewals Completed=3, Application=15} 

जावा पहली कुंजी हो रही (यानी सक्रिय) के लिए कोड

Object myKey = statusName.keySet().toArray()[0]; 

हम पहली कुंजी कैसे एकत्र कर सकते हैं " मान "(यानी 33), मैं अलग-अलग चर में" कुंजी "और" मान "दोनों को स्टोर करना चाहता हूं।

+4

आपको एहसास है कि 'हैश मैप' प्रविष्टियां अनियंत्रित हैं, और इसलिए जब भी आप मानचित्र को संशोधित करते हैं तो "पहला" बदल सकता है? – NPE

+0

क्या आप समझते हैं कि 'हैश मैप' में कोई विशिष्ट ऑर्डर नहीं है? यदि आप इसे बिल्कुल संशोधित करते हैं, तो आप परिणाम पूरी तरह से अलग क्रम में प्राप्त कर सकते हैं। –

+0

नहीं, आदेश चलाने के लिए आदेश की गारंटी नहीं है, लेकिन उसी धागे के भीतर, आदेश पर भरोसा किया जा सकता है। – hd1

उत्तर

93

आप इस कोशिश कर सकते हैं:

Map<String,String> map = new HashMap<>(); 
Map.Entry<String,String> entry = map.entrySet().iterator().next(); 
String key = entry.getKey(); 
String value = entry.getValue(); 

HashMap ध्यान रखें, प्रविष्टि आदेश में गारंटी नहीं है। आदेश को बरकरार रखने के लिए LinkedHashMap का उपयोग करें।

उदाहरण के लिए:

Map<String,String> map = new LinkedHashMap<>(); 
map.put("Active","33"); 
map.put("Renewals Completed","3"); 
map.put("Application","15"); 
Map.Entry<String,String> entry = map.entrySet().iterator().next(); 
String key= entry.getKey(); 
String value=entry.getValue(); 
System.out.println(key); 
System.out.println(value); 

आउटपुट:

Active 
33 
+0

मुझे पता है कि यह एक बहुत पुराना जवाब है .. यह हैशपैप्स के लिए कुंजी और मूल्य के रूप में मूल्य के साथ काम कर रहा है। लेकिन ऑब्जेक्ट के साथ ऑब्जेक्ट के साथ कोशिश करने के लिए ऑब्जेक्ट के साथ कोशिश करते समय: 'com.google.gson.internal.LinkedTreeMap को नहीं डाला जा सकता ...' ... मेरी कक्षा जिसे मैंने सही जगह पर 'स्ट्रिंग' के बजाय कहा था ... ऑनलाइन जवाब नहीं मिल रहा है..हेल्प –

+0

@ डार्थयार्थ आपको अपने संदर्भ के आधार पर उचित प्रकार का उपयोग करना चाहिए। उत्तर देने के लिए –

+0

पहला सुपर धन्यवाद! इसकी उम्मीद नहीं थी ... दूसरा मैं करता हूं, पाया कि जेनरिक्स के साथ रनटाइम में सहेजा नहीं गया है। आखिरकार मैंने 'ऑब्जेक्ट' को 'स्ट्रिंग' में परिवर्तित करने के लिए 'जीसन' का उपयोग कर इसके चारों ओर हैक किया और फिर इसे मेरे वर्ग प्रकार पर वापस पार्स किया। इसकी बदसूरत लेकिन मुझे वास्तव में किसी अन्य चीज़ का कोई अन्य समाधान नहीं मिला जो कि अन्य भाषाओं में करना इतना आसान है (अब मैं जावा को लाता हूं) –

4

how can we collect the first Key "Value" (i.e 33)

youMap.get(keyYouHave) का उपयोग करके आप इसके बारे में मूल्य मिल सकता है।

want to store the Both "Key" and "Value" in separate variable

हां, आप इसे एक चर के लिए असाइन कर सकते हैं।

प्रतीक्षा करें ......... यह खत्म नहीं हुआ है।

यदि आप (व्यवसाय तर्क) सम्मिलन और पुनर्प्राप्ति के क्रम पर निर्भर हैं, तो आप अजीब परिणाम देखने जा रहे हैं। मानचित्र का आदेश नहीं दिया गया है कि वे एक आदेश में स्टोर नहीं करेंगे। कृपया उस तथ्य से अवगत रहें। अपने आदेश को सुरक्षित रखने के लिए कुछ विकल्प का प्रयोग करें। शायद एक LinkedHashMap

32

"पहली" मूल्य प्राप्त करने के लिए:

map.values().toArray()[0] 

"पहली" कुंजी का मान प्राप्त करने के लिए:

map.get(map.keySet().toArray()[0]) 

नोट: कोड से ऊपर परीक्षण किया है और काम करता है।

मैं "पहले" कहता हूं क्योंकि हैश मैप प्रविष्टियों का आदेश नहीं दिया जाता है।

हालांकि, एक लिंक्ड हैशैप उसी प्रविष्टि में अपनी प्रविष्टियों को दोहराता है जैसे कि वे डाले गए थे - यदि आप सम्मिलन आदेश महत्वपूर्ण हैं तो आप अपने मानचित्र कार्यान्वयन के लिए इसका उपयोग कर सकते हैं।

0

ध्यान दें कि आप नोट करना चाहिए कि अपने तर्क प्रवाह कुछ क्रम में HashMap तत्वों तक पहुँचने पर भरोसा नहीं करना चाहिए, बस डाल क्योंकि HashMap रों Collection रों आदेश दिया नहीं कर रहे हैं और कहा कि वे ऐसा करने के लिए उद्देश्य से कर रहे हैं क्या नहीं है। (आप this post में गड़बड़ी और छोटे संग्रह के बारे में अधिक पढ़ सकते हैं)।

Object myKey = statusName.keySet().toArray()[0]; 

बस map.get(key) फोन संबंधित मान से प्राप्त करने के लिए:

Object myValue = statusName.get(myKey); 
-1

आप नीचे की कोशिश कर सकते

पोस्ट करने के लिए वापस, आप पहले से ही पहला तत्व कुंजी लोड करके आधा काम किया है :

Map.Entry<String, Integer> entry = myMap.firstEntry(); 
System.out.println("First Value = " + entry); 
10

जावा करने का 8 रास्ता,

String firstKey = map.keySet().stream().findFirst().get();

0

याद रखें कि प्रविष्टि आदेश में सामान्य रूप से कहें मानचित्र में सम्मान नहीं है। इस प्रयास करें:

/** 
    * Get the first element of a map. A map doesn't guarantee the insertion order 
    * @param map 
    * @param <E> 
    * @param <K> 
    * @return 
    */ 
    public static <E,K> K getFirstKeyValue(Map<E,K> map){ 
     K value = null; 
     if(map != null && map.size() > 0){ 
      Map.Entry<E,K> entry = map.entrySet().iterator().next(); 
      if(entry != null) 
       value = entry.getValue(); 
     } 
     return value; 
    } 

मैं इस का उपयोग केवल जब मुझे लगता है कि कि map.size() == 1 यकीन है।

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