java: HashMap <स्ट्रिंग, int> काम नहीं कर रहा है


128

HashMap<String, int>काम करने लगता नहीं है, लेकिन HashMap<String, Integer>काम करता है। कोई विचार क्यों?


आपके प्रश्न के लिए शब्दों की आपकी पसंद भ्रामक है, क्या आप स्पष्ट कर सकते हैं? और वास्तव में क्या काम नहीं कर रहा है, क्या आप कोड पोस्ट कर सकते हैं?
एंथनी फोर्लोनी

जवाबों:


203

आप जावा में सामान्य तर्कों के रूप में आदिम प्रकारों का उपयोग नहीं कर सकते। इसके बजाय उपयोग करें:

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

साथ स्वत: मुक्केबाजी / unboxing वहाँ कोड में थोड़ा अंतर है। ऑटो-बॉक्सिंग का मतलब है कि आप लिख सकते हैं:

myMap.put("foo", 3);

के बजाय:

myMap.put("foo", new Integer(3));

ऑटो-बॉक्सिंग का अर्थ है कि पहला संस्करण दूसरे में अंतर्निहित है। ऑटो-अनबॉक्सिंग का मतलब आप लिख सकते हैं:

int i = myMap.get("foo");

के बजाय:

int i = myMap.get("foo").intValue();

अंतर्निहित कॉल का intValue()अर्थ है कि यदि कुंजी नहीं मिली है तो यह एक NullPointerExceptionउदाहरण के लिए उत्पन्न करेगा :

int i = myMap.get("bar"); // NullPointerException

कारण है प्रकार का क्षरण । इसके विपरीत, C # सामान्य प्रकार में, रनटाइम पर बनाए नहीं रखा जाता है। वे आपको ऐसा करने से बचाने के लिए स्पष्ट कास्टिंग के लिए "सिंटैक्टिक शुगर" हैं:

Integer i = (Integer)myMap.get("foo");

आपको एक उदाहरण देने के लिए, यह कोड पूरी तरह से कानूनी है:

Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");

3
आपका अंतिम उदाहरण काम नहीं करता है: मैप से डाली नहीं जा सकती <string, Integer> to Map <Integer, String>
T3rm1

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


2

आप में आदिम प्रकारों का उपयोग नहीं कर सकते HashMapint, या doubleकाम नहीं करते। आपको इसके संलग्न प्रकार का उपयोग करना होगा। एक उदाहरण के लिए

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

अब दोनों वस्तुएं हैं, इसलिए यह काम करेगा।


0

int एक आदिम प्रकार है, आप पढ़ सकते हैं कि जावा में एक आदिम प्रकार का क्या मतलब है , और एक नक्शा एक इंटरफ़ेस है जो वस्तुओं के लिए इनपुट के रूप में है:

public interface Map<K extends Object, V extends Object>

ऑब्जेक्ट का मतलब एक वर्ग है, और इसका मतलब यह भी है कि आप एक अन्य वर्ग बना सकते हैं जो उससे निकलता है, लेकिन आप एक ऐसा वर्ग नहीं बना सकते हैं जो इंट से निकलता है। इसलिए आप एक ऑब्जेक्ट के रूप में इंट चर का उपयोग नहीं कर सकते हैं। मैं आपकी समस्या के लिए टो समाधान है:

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

या

Map<String, int[]> map = new HashMap<>();
int x = 1;

//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);

//get the value of x
int y = map.get("x")[0];

-3

आप सामान्य प्रकार के संदर्भों में संदर्भ प्रकार का उपयोग कर सकते हैं, न कि आदिम प्रकार का। इसलिए यहां आपको उपयोग करना चाहिए

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

और के रूप में स्टोर मूल्य

myMap.put("abc", 5);

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