जावा के कलेक्शंस का प्रयोग। सिंघलटनलिस्ट ()?


164

Collections.singletonList()जावा में क्या उपयोग है ? मैं समझता हूं कि यह एक तत्व के साथ एक सूची देता है। मैं ऐसा करने के लिए एक अलग विधि क्यों चाहता हूं? कैसे अपरिवर्तनीयता यहां एक भूमिका निभाती है?

क्या इस विधि के लिए कोई विशेष उपयोगी उपयोग-मामले हैं जो केवल एक सुविधाजनक विधि होने के बजाय हैं?


6
यहां इसका उदाहरण दिया गया है कि यह कैसे उपयोगी हो सकता है - stackoverflow.com/a/1239631/360811
shabunc


1
@sschuberth, कृपया प्रश्नों की तारीखों की तुलना करें। ओपी को इस बात की जानकारी नहीं थी कि वह भविष्य के एक प्रश्न की नकल कर सकता है
कुमारअंकृत

सच है, @KumarAnkit, लेकिन डुप्लिकेट के लिंक अभी भी वैकल्पिक / संभावित बेहतर उत्तरों की तलाश में लोगों के लिए उपयोगी हैं। वास्तव में मेरा मानना ​​है कि डुप्लिकेट के रूप में लिंकिंग को एक द्विदिश बात के रूप में माना जाना चाहिए, और बेहतर प्रश्न / उत्तर रखे जाने चाहिए, चाहे वे पुराने या नए हों।
sschuberth

@sschuberth, अच्छी बात है, लेकिन इसे इस सवाल के समान ही वर्गीकृत किया जाना चाहिए।
कुमारअनकीट

जवाबों:


159

जावाडोक इस कहते हैं:

"केवल निर्दिष्ट ऑब्जेक्ट वाली एक अपरिवर्तनीय सूची देता है। लौटी हुई सूची क्रमबद्ध है।"

तुम पूछो:

मैं ऐसा करने के लिए एक अलग विधि क्यों चाहता हूं?

मुख्य रूप से एक सुविधा के रूप में ... बयानों का एक क्रम लिखने के लिए आपको बचाने के लिए:

  • एक रिक्त सूची ऑब्जेक्ट बनाएँ
  • इसमें एक तत्व जोड़ें, और
  • इसे एक अपरिवर्तनीय आवरण के साथ लपेटें।

यह थोड़ा तेज भी हो सकता है और / या थोड़ी मेमोरी को बचा सकता है, लेकिन यह संभावना नहीं है कि ये छोटी बचत महत्वपूर्ण होगी। (एक अनुप्रयोग जो सिंगलटन सूचियों की विशाल संख्या बनाता है, कम से कम कहना असामान्य है।)

कैसे अपरिवर्तनीयता यहां एक भूमिका निभाती है?

यह विधि के विनिर्देश का हिस्सा है; ऊपर देखो।

क्या इस विधि के लिए कोई विशेष उपयोगी उपयोग-मामले हैं, बजाय केवल एक सुविधा विधि के?

स्पष्ट रूप से, ऐसे उपयोग-मामले हैं जहां singletonListविधि का उपयोग करना सुविधाजनक है । लेकिन मुझे नहीं पता कि आप (उद्देश्यपूर्ण) एक साधारण उपयोग के मामले और "विशेष रूप से उपयोगी" एक के बीच अंतर कैसे करेंगे ...


26

यहाँ सिंगलटन विधियों पर एक विचार है :

मैंने इन विभिन्न "सिंगलटन" विधियों को एपीआई के लिए एक एकल मान पास करने के लिए उपयोगी माना है जिसके लिए उस मूल्य के संग्रह की आवश्यकता होती है। बेशक, यह सबसे अच्छा काम करता है जब कोड को पारित मूल्य को संसाधित करना संग्रह में जोड़ने की आवश्यकता नहीं है।


क्या आप उपरोक्त टिप्पणी के इस भाग को समझने में मेरी मदद कर सकते हैं? "बेशक, यह सबसे अच्छा काम करता है जब कोड पारित मूल्य को संसाधित करता है, संग्रह में जोड़ने की आवश्यकता नहीं है।" मुझे नहीं मिला।
बिल्बो बैगिअंस

2
मुझे लगता है कि वह संदर्भित सूची को संशोधित करने में सक्षम नहीं होने का उल्लेख करता है, क्योंकि यह एक अपरिवर्तनीय है।
डैनियल हिगुएरस

2
@BilboBaggins - यह कथन विडंबनापूर्ण था। :-) वाक्यांश "यह सबसे अच्छा काम करता है जब ..." अधिक सटीक रूप से लिखा गया है "यह केवल तभी काम करता है यदि ..."।
स्टीफन सी

18

जावदोक से

@param  the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.

उदाहरण

import java.util.*;

public class HelloWorld {
    public static void main(String args[]) {
        // create an array of string objs
        String initList[] = { "One", "Two", "Four", "One",};

        // create one list
        List list = new ArrayList(Arrays.asList(initList));

        System.out.println("List value before: "+list);

        // create singleton list
        list = Collections.singletonList("OnlyOneElement");
        list.add("five"); //throws UnsupportedOperationException
        System.out.println("List value after: "+list);
    }
}

जब कोड केवल-पढ़ने के लिए सूची की अपेक्षा करता है, तो इसका उपयोग करें, लेकिन आप केवल इसमें एक तत्व पास करना चाहते हैं। singletonList(धागा-) सुरक्षित और तेज है।


धन्यवाद, यह बेहतर उत्तर है। आप केवल एक उदाहरण देने के बजाय "स्पष्ट रूप से उपयोग के मामले हैं, लेकिन मैं उनके बारे में नहीं जानता"।
theprogrammer

3

आपके अपरिवर्तनीय प्रश्न का उत्तर देने के लिए:

Collections.singletonListएक अपरिवर्तनीय सूची बनाएगा। एक अपरिवर्तनीय सूची (इसे एक अपरिवर्तनीय सूची के रूप में भी संदर्भित किया जाता है) हो सकता है कि इसमें परिवर्तन की गई सामग्री न हो। यदि आप सामग्री को बदलने का प्रयास करते हैं तो आइटम जोड़ने या हटाने के तरीके अपवादों को फेंक देंगे।

एक एकल सूची में केवल वह आइटम होता है और उसे बदला नहीं जा सकता।


2

यदि कोई अपरिवर्तनीय / सिंगलटन संग्रह उस व्यक्ति को संदर्भित करता है जिसके पास केवल एक वस्तु है और जो आगे संशोधित नहीं है, तो एक ही कार्यक्षमता "अनमॉडिफ़ेबिलोलिलेशन" केवल एक वस्तु होने के संग्रह को प्राप्त कर सकती है। चूँकि एक ही वस्तु के साथ एक ही कार्यक्षमता को अपरिवर्तनीय संग्रह द्वारा प्राप्त किया जा सकता है, तो सिंगलटन संग्रह किस विशेष उद्देश्य के लिए कार्य करता है?


एक ऑब्जेक्ट "सामान्य" तरीके से और सिंगलटन विधि का उपयोग करके एक संग्रहणीय संग्रह बनाएं। फिर आप तुरंत देखें क्यों।
kap

1

सिंगलटनलिस्ट किसी भी वस्तु का उदाहरण रख सकता है। वस्तु स्थिति को संशोधित किया जा सकता है।

List<Character> list = new ArrayList<Character>();
list.add('X');
list.add('Y');
System.out.println("Initial list: "+ list);
List<List<Character>> list2 = Collections.singletonList(list);
list.add('Z');
System.out.println(list);
System.out.println(list2);

हम ऊपर की तरह unmodifiableList को परिभाषित नहीं कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.