2010-11-23 14 views
18

प्रश्न यह है कि हैश मैप.वल्यूज़() संग्रह से ऐरेलिस्ट बनाने के लिए कितना खर्च होता है? या अकेले मूल्य संग्रह बनाते हैं? Map.size()> 100k मानते हैं। ऑब्जेक्ट्स को ऐरेलिस्ट (हैश मैप के बजाए) में भी हर समय आयोजित किया जा सकता है, जिसमें अन्य हिस्सों में प्रभाव पड़ता है (तत्वों में संशोधन, कुंजी द्वारा आसान)। ऐरेलिस्ट का उपयोग प्रत्येक एन-वें तत्व पर फिर से करने के लिए किया जाता है। (यही कारण है कि मूल्य संग्रह सीधे उपयोग नहीं किया जा सकता है)। पुनरावृत्ति के दौरान कोई संशोधन नहीं किया जाता है।प्रदर्शन: HashMap.values ​​से एक ArrayList बनाना()

+0

प्रश्न स्पष्ट नहीं है। मुझे समझ में नहीं आया। – Emil

+2

जब आप "लागत" के बारे में बात करते हैं, तो क्या आपका मतलब है, समय या स्मृति? – Ralph

उत्तर

2

आप तत्वों को छोड़ने के लिए Iterator का उपयोग कर सकते हैं - बस next() पर कई बार कॉल करें।

किसी भी संग्रह की सूची बनाना एक रैखिक जटिलता है।

+0

समझ में आता है। तो मैं iterator का उपयोग करता हूं और इसे लूप में it.next() कहते हैं क्योंकि कई बार पैरामीटर होता है। –

+0

हां (15 वर्ण ..) – Bozho

0

आप अपना खुद का हैश मैप बना सकते हैं, जिसमें सीधे मूल्यों का आर्रेलिस्ट संग्रह होता है (मुझे विश्वास नहीं है कि हैश मैप इसे मुफ्त में करता है, इसके लिए डेटा संरचना अलग है)। लेकिन इसके लिए आपकी तरफ से कुछ अतिरिक्त कोडिंग की आवश्यकता है।

7

HashMap आंतरिक रूप से संग्रह values में मूल्यों को संग्रहीत करता है। HashMap के माता-पिता AbstractMap के source code पर एक नज़र डालें।

तो HashMap.values() सीधे Collection देता है। कोई गणना या डेटा प्रतिलिपि नहीं है। यह जितना तेज़ हो सकता है।

बस मूल्यों को प्राप्त और फिर पाश के लिए एक कार्य करें:

int n = 5; // every 5th element 
Object[] values = hashMap.values().toArray(); 
int size = values.length; 
for (int i = 0; i < size; i += n){ 
    values[i]; 
    // do something 
) 
34

HashMap.values() मूल्यों का एक ArrayList लेकिन एक Values संग्रह वापस नहीं करता है।

स्रोत:

public Collection<V> values() { 
     Collection<V> vs = values; 
     return (vs != null ? vs : (values = new Values())); 
    } 

Values एक AbstractCollection है। मूल्यों का कारण केवल हैश मैप के इटरेटर को संदर्भित करना है।

आपका प्रश्न:

प्रश्न कितना करने के लिए लागत एक HashMap.values ​​() संग्रह से एक ArrayList बनाने है?

एक रेखीय जटिलता है कि (जैसा कि Bozho कहा)

ArrayList<V> valuesList = new ArrayList<V>(hashMap.values()); 

ArrayList के बाद से, valuesList संग्रह hashMaptoArray() विधि है जो अनिवार्य रूप में 0..N (आकार) तत्व से एक for पाश करता कॉल संग्रह।

उम्मीद है कि इससे मदद मिलती है।

3

@ बोझो के समाधान पर विस्तृत करने के लिए आप बस कर सकते हैं।

int count = 0; 
for(Value value: map.values()) 
    if(count++ % 5 == 0) 
    // do something.