2011-11-13 21 views
26

का उपयोग कर हैश मैप से कुंजी प्राप्त करें मैं मूल्य का उपयोग करके हैश मैप की कुंजी प्राप्त करना चाहता हूं।मान

hashmap = new HashMap<String, Object>(); 

haspmap.put("one", 100); 
haspmap.put("two", 200); 

जिसका अर्थ है कि मुझे एक ऐसा फ़ंक्शन चाहिए जो मूल्य 100 लेगा और स्ट्रिंग को वापस कर देगा।

ऐसा लगता है कि यहां एक ही चीज़ पूछने के बहुत सारे प्रश्न हैं लेकिन वे मेरे लिए काम नहीं करते हैं।

शायद क्योंकि मैं जावा के साथ नया हूं।

यह कैसे करें?

+0

100 मूल्य और नहीं एक कुंजी है। आपको या तो "एक" और 100 को स्वैप करना होगा या फिर आपको बायैप की आवश्यकता होगी। पहला तर्क कुंजी है और दूसरा तर्क मूल्य है। –

+0

@ फाटल अगली बार इसे एक उत्तर के रूप में प्रदान करें;) आप मुझसे 10 सेकंड तेज थे। – Bozho

+0

@ बोझो मैं अगली बार ऐसा करूंगा। :-) –

उत्तर

62

HashMap में डाल विधि इस तरह परिभाषित किया गया है दे देंगे:

Object put(Object key, Object value) 

कुंजी पहले पैरामीटर है, इसलिए आपके रखे में, "एक" कुंजी है। आप आसानी से एक HashMap में मूल्य से देख सकते हैं नहीं है, अगर तुम सच में ऐसा करना चाहते हैं, यह एक रेखीय खोज किया होगा entrySet() को फोन करके इस तरह:

for (Map.Entry<Object, Object> e : hashmap.entrySet()) { 
    Object key = e.getKey(); 
    Object value = e.getValue(); 
} 

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

+0

यह केवल तब चलेंगे जब डीबगिंग इतनी रन टाइम एक समस्या नहीं है। – kechapito

+1

+1, हालांकि मुझे एंट्री सेट पर फिर से थोड़ा सा सीधा सेट मिलता है क्योंकि इसमें तत्व में मान होता है। फिर भी, बायमैप के बिना ओपी को मानचित्र के बाहर "अद्वितीय मूल्य" invariant को बनाए रखने की आवश्यकता है। –

+0

@ मार्क कार्ड: धन्यवाद। मेरा मतलब था लेकिन मेरी उंगलियों ने सहयोग नहीं किया। एंट्रीसेट अधिक कुशल है क्योंकि आपको कीसेट के प्रत्येक पुनरावृत्ति के लिए लुकअप करने की आवश्यकता नहीं है। – kbyrd

4

आपने इसे उलट दिया है। 100 पहला पैरामीटर होना चाहिए (यह कुंजी है) और "एक" दूसरा पैरामीटर होना चाहिए (यह मान है)।

HashMap के लिए जावाडोक पढ़ें और है कि आप मदद कर सकता है: HashMap

मूल्य पाने के लिए, hashmap.get(100) का उपयोग करें।

+0

ओपीएस मैंने इसे उलट दिया। मैं इसे ठीक कर दूंगा। – kechapito

5
  • आप केवल की जरूरत है कि, बस put(100, "one") का उपयोग करें। ध्यान दें कि कुंजी पहला तर्क है, और मान दूसरा है।
  • आप अगर तुम क्या "एक" तो

    100 में दे रही है हैश को प्रारंभ से प्राप्त करने के लिए (अमरूद से) BiMap उपयोग करते हैं, दोनों कुंजी और मान से प्राप्त करने के लिए सक्षम होने के लिए

0

की जरूरत है

hashmap = new HashMap<Object,String>();

haspmap.put(100,"one");

मानचित्र औरसे मान प्राप्तhashMap.get(100)

उम्मीद है कि मदद करता है।

+0

वास्तव में कारण नहीं है कि मैंने स्ट्रिंग देने और मूल्य वापस करने के लिए इस मानचित्र को इस तरह बनाया है। अब मुझे डिबगिंग के विपरीत विपरीत करने की जरूरत है। – kechapito

4

आपने चाबियाँ और मान मिश्रित किए हैं।

Hashmap <Integer,String> hashmap = new HashMap<Integer, String>(); 

hashmap.put(100, "one"); 
hashmap.put(200, "two"); 

बाद में एक

hashmap.get(100); 

आप "एक"

+0

सुनिश्चित नहीं है कि आप क्यों मतदान कर चुके हैं .... यह ओपी द्वारा एक व्यावहारिक गलती की तरह लग रहा था। @AHungerArtist ने यह भी कहा कि वह इसे नीचे टिप्पणियों में उलट दिया। – jww

1
public class Class1 { 
private String extref="MY"; 

public String getExtref() { 
    return extref; 
} 

public String setExtref(String extref) { 
    return this.extref = extref; 
} 

public static void main(String[] args) { 

    Class1 obj=new Class1(); 
    String value=obj.setExtref("AFF"); 
    int returnedValue=getMethod(value);  
    System.out.println(returnedValue); 
} 

/** 
* @param value 
* @return 
*/ 
private static int getMethod(String value) { 
     HashMap<Integer, String> hashmap1 = new HashMap<Integer, String>(); 
     hashmap1.put(1,"MY"); 
     hashmap1.put(2,"AFF"); 

     if (hashmap1.containsValue(value)) 
     { 
      for (Map.Entry<Integer,String> e : hashmap1.entrySet()) { 
       Integer key = e.getKey(); 
       Object value2 = e.getValue(); 
       if ((value2.toString()).equalsIgnoreCase(value)) 
       { 
        return key; 
       } 
      } 
     } 
     return 0; 

} 
} 
+0

मेरा कोड उत्तर नहीं है। आपको समझा देना है। – EJP

23

हम VALUE से KEY मिल सकती है। नीचे एक नमूना कोड_

public class Main { 
    public static void main(String[] args) { 
    Map map = new HashMap(); 
    map.put("key_1","one"); 
    map.put("key_2","two"); 
    map.put("key_3","three"); 
    map.put("key_4","four");
System.out.println(getKeyFromValue(map,"four")); } public static Object getKeyFromValue(Map hm, Object value) { for (Object o : hm.keySet()) { if (hm.get(o).equals(value)) { return o; } } return null; } }

मुझे उम्मीद है कि इससे सभी की मदद मिलेगी।

+1

यह स्वीकृत उत्तर से बेहतर है। –

+1

शानदार छोटी विधि - मुझे जो चाहिए उसके लिए एक इलाज किया - मैं मानने के वर्षों में इस उदाहरण का अच्छा उपयोग करने जा रहा हूं। – thonnor

0

यदि आप हैशमैप का उपयोग करने के लिए बाध्य नहीं हैं, तो मैं जोड़ी < टी, टी> का उपयोग करने की सलाह दूंगा। व्यक्तिगत तत्वों को पहले और सेकंड कॉल द्वारा एक्सेस किया जा सकता है।

इस http://www.cplusplus.com/reference/utility/pair/

पर एक नज़र मैं इसे यहाँ का इस्तेमाल किया है: http://codeforces.com/contest/507/submission/9531943

+0

प्रश्न जावा के बारे में है, सी ++ नहीं। – EJP