2010-02-28 16 views
35

मेरे पास जावा में हैशटेबल है और तालिका में सभी मानों को फिर से चालू करना चाहते हैं और पुनरावृत्ति करते समय एक विशेष कुंजी-मूल्य जोड़ी को हटाना चाहते हैं।जावा में हैशटेबल से हटना और हटाना

यह कैसे किया जा सकता है?

+0

ही: http://stackoverflow.com/questions/46898/iterate-over -एच-एंट्री-इन-ए-मैप –

उत्तर

37

आप Map की प्रविष्टि नहीं बल्कि Integer के Map, String जोड़े से अधिक जावा 6. निम्न उदाहरण दोहराता में बढ़ाया के लिए लूप वाक्य रचना उपलब्ध का उपयोग करने में सक्षम होने से सेट से अधिक पुनरावृति का सुस्पष्ट java.util.Iterator उपयोग करने की आवश्यकता

List<String> keyList = new ArrayList<String>; 

for(Map.Entry<String,String> entry : hashTable){ 
    if(entry.getValue().equals("delete")) // replace with your own check 
    keyList.add(entry.getKey()); 
} 

for(String key : keyList){ 
    hashTable.remove(key); 
} 

आप: किसी भी प्रविष्टि जिसका Integer कुंजी रिक्त है या बराबर होती है 0.

Map<Integer, String> map = ... 

Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator(); 

while (it.hasNext()) { 
    Map.Entry<Integer, String> entry = it.next(); 

    // Remove entry if key is null or equals 0. 
    if (entry.getKey() == null || entry.getKey() == 0) { 
    it.remove(); 
    } 
} 
+5

आपके पास 'हैशटेबल' में' शून्य 'कुंजी नहीं हो सकती है। यही कारण है कि यह 'मानचित्र' से अलग है। साथ ही, आप 'getKey' के बजाय उपरोक्त कोड में 'Map.Entry getValue' से पूछताछ कर रहे हैं। आप 'entry.getValue() == 0' नहीं कर सकते क्योंकि मान 'स्ट्रिंग' प्रकार के होते हैं। – polygenelubricants

+1

@ पोलिजेनेलब्रिकेंट्स, मानचित्र एक इंटरफेस है जो शून्य पर कोई प्रतिबंध नहीं बनाता है। हैश मैप एक मानचित्र कार्यान्वयन है जो नल की अनुमति नहीं देता है। –

+1

मैं अपने कोड में हैशटेबल का संदर्भ नहीं देता हूं और वैसे भी इसका उपयोग नहीं करता क्योंकि यह हैश मैप द्वारा अधिग्रहण किया गया है (जो ** ** शून्य कुंजी और मानों को अनुमति देता है)। – Adamski

4

कि आपको अस्थायी विलोपन सूची का उपयोग कर सकते को हटाने Java API

+1

आप यह कर सकते हैं लेकिन अतिरिक्त संग्रह का उपयोग करना आवश्यक नहीं है; यह सिर्फ चीजों को और जटिल बनाता है। – Adamski

6

में हैशटेबल विधियों के बारे में अधिक जानकारी प्राप्त कर सकते हैं तो क्या आप कुंजी, मूल्य जोड़ी जिसे आप पहले से हटाना चाहते हैं उसे जानते हैं? यह ऐसा करने के लिए, तो बस अधिक स्पष्ट है:

table.delete(key); 
for (K key: table.keySet()) { 
    // do whatever you need to do with the rest of the keys 
} 
+0

मुझे केवल मूल्य पता था इसलिए यह काम नहीं करेगा। धन्यवाद हालांकि देखने के लिए –

41

आप उपयोग कर सकते हैं Enumeration:

HashMap और अन्य नक्शे के लिए
Hashtable<Integer, String> table = ... 

Enumeration<Integer> enumKey = table.keys(); 
while(enumKey.hasMoreElements()) { 
    Integer key = enumKey.nextElement(); 
    String val = table.get(key); 
    if(key==0 && val.equals("0")) 
     table.remove(key); 
} 
संबंधित मुद्दे