डाल के बजाय putAll का उपयोग करते समय मुझे एक बड़ा प्रदर्शन लाभ दिखाई देता है। देखें नीचे दिए गए नमूना कार्यक्रम:
सार्वजनिक वर्ग SampleTest {
public static void main(final String[] args) {
final Map<String, String> testMap = new HashMap<>();
final Map<String, String> testMap2 = new HashMap<>();
final LocalDateTime startTestTime = LocalDateTime.now();
for(int i=0; i < 1000000; i++) {
testMap.put(i+"", i+"");
}
final LocalDateTime endTestTime = LocalDateTime.now();
System.out.println("<<<<<<<<<Time for put>>>>>>>>>>>");
System.out.println(ChronoUnit.MILLIS.between(startTestTime, endTestTime));
final LocalDateTime startTestTime1 = LocalDateTime.now();
testMap2.putAll(testMap);
final LocalDateTime endTestTime1 = LocalDateTime.now();
System.out.println("<<<<<<<<<Time for put all>>>>>>>>>>>");
System.out.println(ChronoUnit.MILLIS.between(startTestTime1, endTestTime1));
}
}
यह रिटर्न (मिलीसेकंड में):
<<<<<<<<<Time for put>>>>>>>>>>>
1934
<<<<<<<<<Time for put all>>>>>>>>>>>
116
निष्कर्ष: putAll() निश्चित रूप से अधिक है नीचे अस्वीकरण के साथ put() से प्रदर्शन करने वाला। 1. यह परिणाम मेरी मशीन पर है (यानी मशीन कॉन्फ़िगरेशन पर निर्भर करता है)। लेकिन आप अभी भी एक विस्तृत अंतर देखते हैं। 2. जैसा कि उपरोक्त मेटोन एक इंटरफ़ेस है, इसलिए प्रदर्शन कार्यान्वयन पर निर्भर करेगा, मैंने हैश मैप को माना है क्योंकि इसका व्यापक रूप से उपयोग किया जाता है। तो यदि प्रदर्शन एक बाधा है तो आप कम से कम हैश मैप के लिए putAll() को प्राथमिकता दे सकते हैं।
वह अंतिम पंक्ति थोड़ा भ्रामक है। यद्यपि आप वर्णन के रूप में AbstractMap _does_ काम करते हैं, अन्य ठोस नक्शा कार्यान्वयन नहीं करते हैं। –
@ पॉल: +1, आप सही हैं। यह एक सरलीकरण का थोड़ा सा है, लेकिन मुझे विश्वास है कि अधिकांश मानचित्र इंटरफ़ेस अनुपालन कार्यान्वयन इस तरह से काम करते हैं, क्योंकि मानचित्र इंटरफ़ेस इतना अधिक छूट नहीं देता है। –