2009-11-24 16 views
87

के आधार पर हैश मैप से स्ट्रिंग मान प्राप्त करें मेरे पास HashMap है जिसमें विभिन्न चाबियाँ और मान हैं, मैं एक मूल्य कैसे प्राप्त कर सकता हूं?कुंजी नाम

मेरे पास my_code नामक मानचित्र में एक कुंजी है, इसमें एक स्ट्रिंग होनी चाहिए, मैं इसे मानचित्र के माध्यम से फिर से चलाने के बिना कैसे प्राप्त कर सकता हूं?

अब तक मुझे मिल गया है ..

HashMap newMap = new HashMap(paramMap); 
    String s = newMap.get("my_code").toString(); 

मैं इस तरह के "एबीसी" या "डीईएफ़" के रूप में एक String, देखने के लिए के रूप में वह यह है कि क्या मैं वहाँ शुरू में डाल की उम्मीद कर रहा हूँ, लेकिन अगर मैं

उत्तर

118

बस Map#get(key) का उपयोग);, मैं नक्शे आप शायद अनुमान लगा सकते हैं के रूप में के साथ भी परिचित नहीं कर रहा हूँ एक System.out.println() मैं java.lang.string#F0454 की तरह कुछ

क्षमा मिलता है?

Object value = map.get(myCode); 

यहाँ नक्शे के बारे में एक ट्यूटोरियल है, तो आप इसे उपयोगी पाते हो सकता है: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html

संपादित करें: आप निम्नलिखित के साथ अपने प्रश्न संपादित: इस तरह के "एबीसी" या "डीईएफ़" के रूप में

मैं एक स्ट्रिंग देखने की उम्मीद कर रहा हूँ, के रूप में है कि क्या मैं वहाँ शुरू में डाल दिया है , लेकिन मैं # F0454 java.lang.string की तरह कुछ मिलता है अगर मैं एक println() करना

क्षमा करें, मैं नक्शे के साथ भी परिचित आप शायद अनुमान लगा सकते हैं के रूप में नहीं कर रहा हूँ;)

आप Object#toString() के परिणाम देख रहे हैं। लेकिन java.lang.String को पहले से ही एक कार्यान्वित किया जाना चाहिए, जब तक कि आपने नाम में लोअरकेस s के साथ कस्टम कार्यान्वयन बनाया हो। यदि यह वास्तव में एक कस्टम ऑब्जेक्ट है, तो वांछित ऑब्जेक्ट पर जब भी आप System.out.println() या toString() करते हैं तो आपको "मानव पठनीय स्ट्रिंग" प्राप्त करने के लिए Object#toString() ओवरराइड करना होगा। उदाहरण के लिए:

@Override 
public String toString() { 
    return "This is Object X with a property value " + value; 
} 
+0

बेशक, यदि आप एक कस्टम स्ट्रिंग क्लास बना रहे हैं, तो मैं अनुशंसा करता हूं (1) ऐसा नहीं कर रहा है, क्योंकि शायद यह नहीं है कि आप क्या करना चाहते हैं, और (2) यदि आप ऐसा करने जा रहे हैं, तो मत डालें यह java.lang नामस्थान में। – MatrixFrog

+1

यदि हैश मैप <स्ट्रिंग, स्ट्रिंग> newMap = new हैश मैप <स्ट्रिंग, स्ट्रिंग>(); इस से स्ट्रिंग तत्व कैसे प्राप्त करें ...? जहां स्ट्रिंग मान = newMap.get ("my_code"); त्रुटि –

+0

देता है कि आप कैसे उलटा कर सकते हैं? मूल्य से कुंजी प्राप्त करें? – delive

7

आपका प्रश्न बिल्कुल स्पष्ट नहीं है कि मुझे डर है। एक कुंजी में "नाम" नहीं होता है; जहां तक ​​मानचित्र का संबंध है, इसे "बुलाया" नहीं है - यह सिर्फ एक कुंजी है, और इसकी तुलना अन्य चाबियों से की जाएगी। यदि आपके पास कई प्रकार की चाबियाँ हैं, तो मैं दृढ़ता से सुझाव देता हूं कि आप उन्हें स्वच्छता के लिए अलग-अलग मानचित्रों में रखें।

यदि यह मदद नहीं करता है, तो कृपया प्रश्न को स्पष्ट करें - कुछ कोड के साथ प्राथमिकता से इसका मतलब यह दिखाने के लिए कि आपका क्या मतलब है।

0

आप HashMap से मिलता है (वस्तु कुंजी) पद्धति का उपयोग कर सकते हैं। ध्यान रखें कि मैप कुंजी के लिए उपयोगी वर्ग होने के लिए, आपके कुंजी वर्ग को बराबर विधि को ओवरराइड करना चाहिए।

47

आप भंडारण कर रहे हैं तारों के रूप में कुंजियों/मूल्यों, तो यह काम करेगा:

HashMap<String, String> newMap = new HashMap<String, String>(); 
newMap.put("my_code", "shhh_secret"); 
String value = newMap.get("my_code"); 

सवाल क्या HashMap में आबादी वाले हो जाता है (कुंजी & मूल्य)

+0

यदि हैश मैप <स्ट्रिंग, स्ट्रिंग> newMap = new हैश मैप <स्ट्रिंग, स्ट्रिंग>(); इस से स्ट्रिंग तत्व कैसे प्राप्त करें ...? जहां स्ट्रिंग मान = newMap.get ("my_code"); त्रुटि देता है –

8

आप जेनेरिक्स का उपयोग करेगा और अपने नक्शे को परिभाषित के रूप में

Map<String,String> map = new HashMap<String,String>(); 

तो

के रूप में मूल्य प्राप्त करने में कठिनाई

आप अभ्यस्त) map.get (टाइपकास्ट या स्ट्रिंग मान पाने के लिए toString विधि कॉल करने के लिए आवश्यक हो

4

एक महत्वपूर्ण बात यहाँ ध्यान दिया जाना चाहिए है कि यदि आपकी कुंजी जावा में उपयोगकर्ता परिभाषित वर्ग की एक वस्तु है फिर इसे बराबर विधि को ओवरराइड करने के लिए एक बिंदु बनाओ। क्योंकि HashMap.get (ऑब्जेक्ट कुंजी) विधि कुंजी मान से मेल खाने के लिए बराबर विधि का उपयोग करती है। यदि आप बराबर विधि को ओवरराइड नहीं करते हैं तो यह कुंजी के संदर्भ के आधार पर मूल्य को खोजने का प्रयास करेगा, न कि कुंजी के वास्तविक मूल्य पर, जिस स्थिति में यह हमेशा शून्य हो जाएगा।

+0

gr8 स्पष्टीकरण मैम :) – eLemEnt

0

मान लीजिए आप HashMap घोषित रूप में: -

HashMap<Character,Integer> hs = new HashMap<>(); 

फिर, मानचित्र में महत्वपूर्ण प्रकार चरित्र डेटा प्रकार और पूर्णांक type.Now के मूल्य का,, मूल्य है मूल्य कुंजी के प्रकार पर ध्यान दिए बिना प्रमुख के लिए इसी पाने के लिए प्रकार, वाक्य रचना है: -

char temp = 'a'; 
    if(hs.containsKey(temp)){ 
`  int val = hs.get(temp); //val is the value corresponding to key temp 
    } 

तो, अपने प्रश्न के अनुसार आप स्ट्रिंग मान पाने के लिए एक key.For करने के लिए इसी यह, बस HashMap के रूप में HashMap घोषित < "कुंजी का डेटाप्रकार" चाहते हैं, "मूल्य की डेटाप्रकार" एचएस = नया हैश मैप <>(); इसका उपयोग करने से आपका कोड क्लीनर बन जाएगा और आपको hs.get ("my_code") के परिणाम को डिफ़ॉल्ट रूप से स्ट्रिंग करने के परिणाम को कनवर्ट करने की आवश्यकता नहीं है क्योंकि यह प्रविष्टि समय पर स्ट्रिंग के मान को रखता है तो स्ट्रिंग का मान देता है।

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