मैं सोच रहा था कि कौन सा अधिक कुशल है और क्यों?अमरूद इम्यूटेबललिस्ट कॉपी बनाम बिल्डर
1)
List<Blah> foo;
...
return ImmutableList.copyOf(foo);
या
2)
List<Blah> foo;
...
return new ImmutableList.Builder<Blah>().addAll(foo).build();
मैं सोच रहा था कि कौन सा अधिक कुशल है और क्यों?अमरूद इम्यूटेबललिस्ट कॉपी बनाम बिल्डर
1)
List<Blah> foo;
...
return ImmutableList.copyOf(foo);
या
2)
List<Blah> foo;
...
return new ImmutableList.Builder<Blah>().addAll(foo).build();
मैं किसी भी कारण है कि तुम यहाँ बिल्डर का उपयोग करना चाहिए नहीं दिख रहा है:
ImmutableList.copyOf
ज्यादा हैबनाने से अधिक पठनीय इस मामले में,Builder
सामान्य प्रकार का अनुमान लगा नहीं है और आप जब एक लाइनर के रूप में इस्तेमाल खुद के द्वारा प्रकार निर्दिष्ट करने के लिए है,ImmutableList.copyOf
does good magic जब एक और अपरिवर्तनीय संग्रह के साथ लागू किया (वास्तव में डेटा की प्रतिलिपि जब यह इतना करने के लिए) के लिए सुरक्षित है से बचने के लिए, प्रयास करताBuilder#addAll
invokes ArrayList
जबकि copyOf
पहले बनाया था से बचा जाता है किसी भी सूची बनाने की addAll
शून्य और एक तत्व संग्रह (खाली अपरिवर्तनीय सूची और सिंगलटन अपरिवर्तनीय सूची क्रमशः देता है),copyOf(Collection)
उदाहरण पैदा नहीं करता अस्थायी ArrayList
(copyOf(Iterable)
और copyOf(Iterator)
ऐसा नहीं करता है),Builder#build
copyOf
को पहले आंतरिक रूप से आबादी वाले ArrayList
पर आमंत्रित करता है, जो आपको आपके प्रश्न पर लाता है - पर Builder
का उपयोग क्यों करें?पीएस व्यक्तिगत रूप से new ImmutableList.Builder<Blah>()
कन्स्ट्रक्टर के बजाय ImmutableList.builder()
स्थैतिक फैक्ट्री का उपयोग करता हूं - जब Builder<Blah>
को आवंटित किया जाता है तो पहले इंफ्रायर जेनेरिक प्रकार होता है जबकि बाद वाला नहीं होता है।
विस्तृत स्पष्टीकरण के लिए धन्यवाद! – user973479
क्या आपने इसे अपनी प्रदर्शन बाधा के रूप में पहचाना है? क्योंकि जब तक आपके पास ** विशिष्ट ** कारण नहीं है, तो आप इसकी दक्षता की परवाह क्यों करते हैं, आपको अब उस पहलू को अनदेखा करना चाहिए और अधिक पठनीय (यानी पहला) का उपयोग करना चाहिए। –
मैं अपने प्रोजेक्ट में अमरूद का उपयोग करना शुरू करने से पहले उत्सुक था। मुझे यकीन नहीं था कि 'सही' तरीका – user973479
है यदि कोई सरल एकल-विधि-कॉल-तरीका है जो वास्तव में वही करता है जो आप चाहते हैं और ऑब्जेक्ट-निर्माण-और-दो-विधि-कॉल-तरीका करने के लिए (प्रकार का) वही बात है, तो मैं हर बार सरल चुनना चाहता हूं। –