"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > [कोड तुलना] Collections.singletonList बनाम List.of

[कोड तुलना] Collections.singletonList बनाम List.of

2024-08-07 को प्रकाशित
ब्राउज़ करें:123

[Code Compare] Collections.singletonList vs List.of

पोस्टों की इस श्रृंखला में, मैं समान कार्यक्षमता को कोड करने के विभिन्न तरीकों की तुलना कर रहा हूं। पिछली पोस्ट में एकल-तत्व सूची बनाने के लिए 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 के लाभों को पिछली पोस्ट में शामिल किया गया था, लेकिन संक्षेप में:

  1. इनलाइन कार्यान्वयन: एक पंक्ति में वांछित तत्व के साथ आरंभ करें।
  2. अपरिवर्तनीयता: सूची का आकार और उसके एकल तत्व की सामग्री को बदला नहीं जा सकता।
  3. मेमोरी आवंटन: सिंगलटनलिस्ट क्लास में एकल तत्व के लिए केवल एक फ़ील्ड होता है।
  4. सीपीयू उपयोग: सिंगलटनलिस्ट कंस्ट्रक्टर एकल तत्व को एक पैरामीटर के रूप में स्वीकार करता है, जिसके लिए किसी आकार बदलने या सरणी हेरफेर की आवश्यकता नहीं होती है।

की सूची

विधि हस्ताक्षर

स्थिर सूची ​​की()

  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 बताता है कि यह एक अपरिवर्तनीय सूची है:

एक तत्व वाली एक अपरिवर्तनीय सूची लौटाता है।

यह संग्रह की अपरिवर्तनीयता की एक नई समझ को दर्शाता है। इस दस्तावेज़ के अनुसार:

एक संग्रह को अपरिवर्तनीय माना जाता है यदि तत्वों को जोड़ा, हटाया या प्रतिस्थापित नहीं किया जा सकता है। हालाँकि, एक अपरिवर्तनीय संग्रह केवल तभी अपरिवर्तनीय होता है जब संग्रह में शामिल तत्व अपरिवर्तनीय हों।

शब्दावली में इस अंतर के बावजूद, दोनों फ़ैक्टरी विधियों की कार्यक्षमता लगभग समान है। अनमॉडिफ़ाएबललिस्ट के अंदर गहराई से देखने पर, हम पा सकते हैं:

  static  List of(E e1) {
      return new ImmutableCollections.List12(e1);
  }

कितना आश्चर्य है, हालांकि, वे इतने सटीक शब्द अपरिवर्तनीय के साथ नहीं गए!

  static final class List12 extends     
    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 AbstractImmutableList extends
  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 एक ठोस विकल्प बना रहता है।

विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/leandrostl/code-compare-collectionssingletonlist-vs-listof-385?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.com से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3