पोस्टों की इस श्रृंखला में, मैं समान कार्यक्षमता को कोड करने के विभिन्न तरीकों की तुलना कर रहा हूं। पिछली पोस्ट में एकल-तत्व सूची बनाने के लिए Collections.singletonList और ArrayList की तुलना की गई थी।
इस पोस्ट में मैं Collections.singletonList की तुलना एक अन्य प्रसिद्ध फ़ैक्टरी विधि, List.of से करूँगा।
सार्वजनिक स्थैतिक सूची सिंगलटन सूची(टी ओ)
public static void main(String[] args) { final var addresses = Collections.singletonList( new Address( "742 Evergreen Terrace", "Springfield", "New York", "13468", "US" )); System.out.println(addresses); }
यह विधि एक अपरिवर्तनीय सूची लौटाती है जिसमें केवल निर्दिष्ट ऑब्जेक्ट होता है। इसे Java 1.3 में पेश किया गया था। ArrayList के लाभों को पिछली पोस्ट में शामिल किया गया था, लेकिन संक्षेप में:
स्थिर सूची की()
public static void main(String[] args) { final var addresses2 = List.of( new Address( "1007 Mountain Drive", "Bristol Township", "New Jersey", null, "US" )); System.out.println(addresses2); }
List.of(E e) विधि भी एक फ़ैक्टरी विधि है जो एक अपरिवर्तनीय सूची लौटाती है। Collections.singletonList(E e) के विपरीत, जो केवल एक तत्व का समर्थन करता है, List.of 0 से 10 तत्वों के साथ-साथ कई तत्वों वाले सरणियों का समर्थन करता है। इसे सिंगलटनलिस्ट के 17 साल बाद जावा 9 में पेश किया गया था।
यह दिलचस्प बात है कि, सिंगलटनलिस्ट के विपरीत, जिसमें टिप्पणी है:
एक अपरिवर्तनीय सूची लौटाता है जिसमें केवल निर्दिष्ट ऑब्जेक्ट होता है।
Array.of बताता है कि यह एक अपरिवर्तनीय सूची है:
एक तत्व वाली एक अपरिवर्तनीय सूची लौटाता है।
यह संग्रह की अपरिवर्तनीयता की एक नई समझ को दर्शाता है। इस दस्तावेज़ के अनुसार:
एक संग्रह को अपरिवर्तनीय माना जाता है यदि तत्वों को जोड़ा, हटाया या प्रतिस्थापित नहीं किया जा सकता है। हालाँकि, एक अपरिवर्तनीय संग्रह केवल तभी अपरिवर्तनीय होता है जब संग्रह में शामिल तत्व अपरिवर्तनीय हों।
शब्दावली में इस अंतर के बावजूद, दोनों फ़ैक्टरी विधियों की कार्यक्षमता लगभग समान है। अनमॉडिफ़ाएबललिस्ट के अंदर गहराई से देखने पर, हम पा सकते हैं:
staticList of(E e1) { return new ImmutableCollections.List12(e1); }
कितना आश्चर्य है, हालांकि, वे इतने सटीक शब्द अपरिवर्तनीय के साथ नहीं गए!
static final class List12extends AbstractImmutableList implements Serializable { @Stable private final E e0; @Stable private final E e1; List12(E e0) { this.e0 = Objects.requireNonNull(e0); this.e1 = null; } ... }
static abstract class AbstractImmutableListextends AbstractImmutableCollection implements List , RandomAccess { // all mutating methods throw UnsupportedOperationException @Override public void add(int index, E element) { throw uoe(); } @Override public boolean addAll(int index, Collection extends E> c) { throw uoe(); } @Override public E remove(int index) { throw uoe(); } @Override public void replaceAll(UnaryOperator operator) { throw uoe(); } @Override public E set(int index, E element) { throw uoe(); } @Override public void sort(Comparator super E> c) { throw uoe(); }
एकमात्र अंतर यह है कि सूची 12 में संभावित रूप से दो तत्वों के लिए दो फ़ील्ड हैं, जिसके परिणामस्वरूप बड़ी वस्तुओं से निपटने तक नगण्य मेमोरी फ़ुटप्रिंट होता है।
इस बार, हमने एकल-तत्व सूची बनाने के लिए Collections.singletonList और List.of फ़ैक्टरी विधियों की तुलना की। हमने अपरिवर्तनीय और unmodifiable के शब्दार्थ के बारे में चर्चा की और दिखाया कि दोनों विधियां कुशल, संक्षिप्त और संसाधन-प्रकाश हैं। यदि आप नवीनतम जावा संस्करण का उपयोग कर सकते हैं, तो यह इसकी परिचितता, स्पष्टता के लिए बेहतर है और क्योंकि हम संग्रह की तुलना में सूची इंटरफ़ेस का अधिक उपयोग करते हैं। यदि पुराने जावा संस्करण तक सीमित रखा जाए, तो Collections.singletonList एक ठोस विकल्प बना रहता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3