मुख्य नाम के आधार पर हाशप से स्ट्रिंग मान प्राप्त करें


123

मेरे पास HashMapविभिन्न कुंजियों और मूल्यों के साथ है, मैं एक मूल्य कैसे प्राप्त कर सकता हूं?

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

अब तक मुझे मिला है ।।

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

मैं String"एबीसी" या "डीईएफ" जैसे एक के रूप में देखने की उम्मीद कर रहा हूं , जैसा कि मैंने शुरू में वहां रखा था, लेकिन अगर मुझे ऐसा System.out.println()कुछ मिलता हैjava.lang.string#F0454

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

जवाबों:


166

बस उपयोग करें Map#get(key)?

Object value = map.get(myCode);

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

संपादित करें: आपने अपना प्रश्न निम्नलिखित के साथ संपादित किया:

मैं एक स्ट्रिंग देखने की उम्मीद कर रहा हूं, जैसे कि "एबीसी" या "डीईएफ", जैसा कि मैंने शुरू में वहां रखा था, लेकिन अगर मैं एक System.out.println () करता हूं तो मुझे java.lang.string # जैसा कुछ मिलता है F0454

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

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

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

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

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

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

58

यदि आप स्ट्रिंग्स के रूप में कुंजी / मान संचय कर रहे हैं, तो यह काम करेगा:

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

सवाल यह है कि हाशप (आबादी और मूल्य) में क्या होता है


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

11

यदि आप Generics का उपयोग करेंगे और अपने मानचित्र को इस प्रकार परिभाषित करेंगे

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

तब के रूप में मूल्य प्राप्त करना

 String s = map.get("keyStr"); 

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


9

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

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



6

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


gr8 स्पष्टीकरण
मैम

3

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

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

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

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

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


1

यह कुंजीसेट (), गेट (), मान () और एंट्रीसेट () फ़ंक्शन का उपयोग करने का एक और उदाहरण है कि मैप में कीज और वैल्यूज कैसे प्राप्त करें:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.