2010-02-16 8 views
9

मैं नीचे के रूप में keySet() विधि के साथ एक HashMap से अधिक पाश करने के लिए कोशिश कर रहा हूँ:कीसेट फ़ील्ड रिक्त है

for (String key : bundle.keySet()) { 
    String value = bundle.get(key); 
    ... 
} 

मैं का एक बहुत का उपयोग करने के लिए-प्रत्येक मेरी कोड के अन्य भागों में HashMaps पर छोरों, लेकिन एक अजीब व्यवहार के रूप में यह एक: अपने आकार 7 (क्या सामान्य है), लेकिन keySet, entrySet और valuesnull हैं (ग्रहण डिबगर के अनुसार)!

"समूह" को चर instantiated और आबादी के रूप में (कुछ भी नहीं मूल ...) इस प्रकार है:

Map <String, String> privVar; 
Constructor(){ 
    privVar = new HashMap<String, String>(); 
} 
public void add(String key, String value) { 
    this.privVar.put(key, value); 
} 
+2

आप के लिए-प्रत्येक HashMaps पर छोरों मुझे लगता है कि आप अपनी संरचना को बदल चाहते हो सकता है एक बहुत कुछ कर रहे हैं। – Macarse

+0

मैं @Macarse से सहमत हूं। इसके अलावा: * यदि * यदि आप एक 'Map' से अधिक लूप करना चाहते हैं और दोनों कुंजी और मूल्यों की जरूरत है, यह आमतौर पर बहुत प्रत्येक कुंजी के लिए' entrySet() 'से बचने के लिए अनावश्यक लुकअप अधिक पाश करने के लिए बेहतर है। –

+0

आपके सुझाव Joachim के लिए धन्यवाद, मैं वह करूँगा। @Macarse: मैं अपने नक्शे की-वैल्यू फ़ाइलें (एक्सेल स्प्रेडशीट) से निकाले गए जोड़ों में मान रखा एक नई स्प्रैडशीट बनाने से पहले वाक्य-नियम (regexp चेक) का एक सेट लागू करने के लिए। क्या आपको लगता है कि नक्शा स्टोर करने के लिए कोई अच्छी वस्तु नहीं है? –

उत्तर

18

आप keySet, entrySet और values से क्या मतलब है? यदि आपका मतलब HashMap के आंतरिक फ़ील्ड का है, तो आपको उन पर ध्यान नहीं देना चाहिए और उन्हें परवाह नहीं करना चाहिए। वे कैशिंग के लिए उपयोग किया जाता है।

जावा 6 वी एम में उदाहरण है कि मैं का उपयोग keySet() इस तरह कार्यान्वित किया जाता है के लिए:

public Set<K> keySet() { 
    Set<K> ks = keySet; 
    return (ks != null ? ks : (keySet = new KeySet())); 
} 

तो तथ्य यह है कि keySetnull अप्रासंगिक है। keySet() (विधि) कभी भी null वापस नहीं करेगा।

ही entrySet() और values() लिए सच है।

+1

ऐसा लगता है कि ग्रहण डीबगर 'टेबल' फ़ील्ड में वांछित जानकारी प्रदर्शित करता है। । – Personman

+0

यह data.keySet() toArray का उपयोग कर जावा 7 में मेरे लिए अशक्त लौटने(); जहां डेटा हैश मैप <स्ट्रिंग, स्ट्रिंग> है और यह शून्य नहीं है – tricknology

+0

@ टट्रोनोलॉजी: यदि ऐसा है, तो मेरा सुझाव है कि आप इसे एक नए प्रश्न के रूप में पोस्ट करें (आदर्श रूप से [एसएससीसीई] (http://sscce.org के साथ) /))। –

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