जावा में सूची <स्ट्रिंग> ऑब्जेक्ट को इनिशियलाइज़ कैसे करें?


404

मैं निम्नलिखित कोड के रूप में एक सूची को इनिशियलाइज़ नहीं कर सकता:

List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));

मैं निम्नलिखित त्रुटि का सामना करता हूं:

प्रकार को तत्काल नहीं किया जा सकता List<String>

मैं तुरंत कैसे कर सकता हूं List<String>?

जवाबों:


733

यदि आप इसे एपीआई के लिए Listआप ध्यान देंगे यह कहते हैं:

Interface List<E>

एक interfaceसाधन होने के नाते इसे तत्काल नहीं किया जा सकता (कोई new List()भी संभव नहीं है)।

यदि आप उस लिंक की जांच करते हैं, तो आपको कुछ ऐसे classईएसटी मिलेंगे जो लागू होते हैं List:

सभी ज्ञात कार्यान्वयन कक्षाएं:

AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack,Vector

जिन्हें तत्काल किया जा सकता है। उनके बारे में अधिक जानने के लिए उनके लिंक का उपयोग करें, IE: यह जानने के लिए कि कौन आपकी आवश्यकताओं को बेहतर बनाता है।

3 सबसे अधिक इस्तेमाल किए जाने वाले संभवतः हैं:

 List<String> supplierNames1 = new ArrayList<String>();
 List<String> supplierNames2 = new LinkedList<String>();
 List<String> supplierNames3 = new Vector<String>();

बोनस:
आप इसे Arrays classनिम्न प्रकार से, उपयोग करके, आसान तरीके से, मानों के साथ त्वरित कर सकते हैं:

List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));

लेकिन ध्यान दें कि आपको उस सूची में अधिक तत्व जोड़ने की अनुमति नहीं है, क्योंकि यह है fixed-size


1
Arrays.asList महान है, लेकिन जैसा कि आपने अब तक देखा होगा कि वह ऐसा करने में विफल रहता है जैसे मामलों में कोई उम्मीद करता हैint[] a = {1,2,3}; System.out.println(Arrays.asList(a)); // [[I@70cdd2]
Mr_and_Mrs_D

1
@JAIL ऐसा नहीं है। यह एक तत्व की एक सूची है, जहां एक तत्व एक सरणी है। वांछित व्यवहार शायद तीन तत्वों 1, 2, और 3. की ​​एक सूची थी
क्रिस्टोफ़र हैमरस्ट्रॉम

1
@Christoffer Hammarström किसी सूची या सरणी को मुद्रित करने के लिए, आप java.util.Arrays.toString (सरणी) का उपयोग कर सकते हैं;, इसलिए यह सुविधा पहले से ही दी गई है
Maxr1998

1
कुछ डिस्कोर्स इस तरह और यहां वेक्टर का उपयोग करते हैं । थ्रेडिंग मुद्दों के कारण
नूनो राफेल फिग्यूएरेडो

3
यदि आपको परिणामी सूची की आवश्यकता है ArrayList, तो उपयोग करेंnew ArrayList<>(Arrays.asList("sup1", "sup2", "sup3"))
डैनियल एफ

113

इंटरफ़ेस को तुरंत बंद नहीं कर सकते लेकिन कुछ कार्यान्वयन हैं:

JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

// creates immutable lists, so you can't modify such list 
List<String> immutableList = List.of("one", "two", "three");

// if we want mutable list we can copy content of immutable list 
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

साथ ही अमरूद जैसे अन्य पुस्तकालयों द्वारा आपूर्ति किए जाने वाले कई अन्य तरीके हैं ।

List<String> list = Lists.newArrayList("one", "two", "three");

38

सूची एक इंटरफ़ेस है , आप एक इंटरफ़ेस को तुरंत नहीं कर सकते, क्योंकि इंटरफ़ेस एक सम्मेलन है, आपके कक्षाओं में कौन से तरीके होने चाहिए। त्वरित करने के लिए, आपको उस इंटरफ़ेस के कुछ अहसास (कार्यान्वयन) की आवश्यकता होती है। सूची इंटरफ़ेस के बहुत लोकप्रिय कार्यान्वयन के साथ नीचे दिए गए कोड का प्रयास करें:

List<String> supplierNames = new ArrayList<String>(); 

या

List<String> supplierNames = new LinkedList<String>();

14

आपको उपयोग करने की आवश्यकता होगी ArrayList<String>या ऐसे।

List<String> एक इंटरफ़ेस है।

इसे इस्तेमाल करो:

import java.util.ArrayList;

...

List<String> supplierNames = new ArrayList<String>();

13

सूची एक इंटरफ़ेस है, और आप एक इंटरफ़ेस को इनिशियलाइज़ नहीं कर सकते हैं। इसके बजाय एक क्रियान्वयन वर्ग को तत्काल करें।

पसंद:

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();

9

सूची सिर्फ एक इंटरफ़ेस है, कुछ सामान्य सूची की परिभाषा। आपको इस सूची इंटरफ़ेस को लागू करने की आवश्यकता है। दो सबसे आम हैं:

ArrayList - एक सरणी पर लागू की गई सूची

List<String> supplierNames = new ArrayList<String>();

लिंक्डलिस्ट - तत्वों की एक परस्पर श्रृंखला की तरह लागू की गई सूची

List<String> supplierNames = new LinkedList<String>();

9

ज्यादातर मामलों में आप सरल चाहते हैं ArrayList- का कार्यान्वयनList

जेडीके संस्करण 7 से पहले

List<String> list = new ArrayList<String>();

JDK 7 और बाद में आप डायमंड ऑपरेटर का उपयोग कर सकते हैं

List<String> list = new ArrayList<>();

इसके अलावा यहाँ पर ओरेकल दस्तावेज़ - संग्रह लिखे गए हैं


7

आप किस प्रकार की सूची का उपयोग करना चाहते हैं, इस पर निर्भर करता है

List<String> supplierNames = new ArrayList<String>();

आपको जाना चाहिए।

सूची इंटरफ़ेस है, ArrayList सूची इंटरफ़ेस का एक कार्यान्वयन है। अधिक कार्यान्वयन जो आपकी आवश्यकताओं के अनुसार बेहतर हो सकते हैं , उन्हें सूची इंटरफ़ेस के जावाडॉक्स को पढ़कर पाया जा सकता है ।


7

यदि आप इसमें केवल एक ऑब्जेक्ट के साथ एक अपरिवर्तनीय बनाना चाहते हैं , तो आप इस एपीआई का उपयोग कर सकते हैं:List<T>

List<String> oneObjectList = Collections.singletonList("theOnlyObject”);

अधिक जानकारी: डॉक्स


5

सूची एक इंटरफ़ेस है। आप इसे आरंभ करने के लिए सूची का उपयोग नहीं कर सकते।

  List<String> supplierNames = new ArrayList<String>();

ये कुछ सूची में शामिल वर्ग हैं,

ArrayList, LinkedList, Vector

आप अपनी आवश्यकता के अनुसार इनमें से किसी का भी उपयोग कर सकते हैं। इन प्रत्येक वर्गों की अपनी विशेषताएं हैं।


कुछ डिस्कोर्स इस तरह और यहां वेक्टर का उपयोग करते हैं । थ्रेडिंग के मुद्दों के कारण
नूनो राफेल फिग्यूएरेडो

3

बस मामले में, कोई भी अभी भी इस सवाल के आसपास झूठ बोल रहा है। क्योंकि, मैं एक या दो नए उपयोगकर्ताओं को फिर से एक ही सवाल पूछ रहा हूं और सभी लोग बता रहे हैं, नहीं , आप ऐसा नहीं कर सकते, प्रिय प्रूडेंस , यहां दिए गए सभी उत्तरों के अलावा, मैं अतिरिक्त जानकारी प्रदान करना चाहता हूं - हां आप वास्तव में कर सकते हैं do, सूची सूची = नई सूची (); लेकिन इंटरफेसेस के सभी तरीकों के कार्यान्वयन को लिखने की कीमत पर। धारणा केवल सूची सूची = नई सूची () नहीं है; परंतु

List<Integer> list = new List<Integer>(){

        @Override
        public int size() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public boolean isEmpty() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean contains(Object o) {
            // TODO Auto-generated method stub
            return false;
        }

..... और इतने पर (सभी तरीके नहीं लिख सकते।)

यह अनाम वर्ग का एक उदाहरण है । यह सही है जब कोई कहता है, नहीं , आप एक इंटरफेस को तुरंत नहीं कर सकते, और यह सही है लेकिन आप कभी नहीं कह सकते हैं, आप सूची सूची = नई सूची () लिखना चाहते हैं; लेकिन, जाहिर है आप ऐसा कर सकते हैं और यह एक कठिन कथन है कि आप ऐसा नहीं कर सकते


हालांकि स्पष्ट होने के लिए, यह एक ऐसी वस्तु नहीं बनाता है जिसका वास्तविक प्रकार है List। बल्कि, यह एक नए वर्ग की घोषणा करता है जिसका कोई नाम और कार्यान्वयन नहीं है List, और रन-टाइम में नए घोषित वर्ग का एक नया उद्देश्य बनता है।
रेडियोडेफ

0

हम बनाया सोयुज-टू 1 समस्या को आसान बनाने के लिए: परिवर्तित करने के लिए कैसे Xकरने के लिए Y(उदाहरण के लिए Stringकरने के लिए Integer)। रूपांतरण की तरह भी एक वस्तु का निर्माण कर रही है तो यह निर्माण के लिए एक सरल कार्य है Map, List,Set :

import io.thedocs.soyuz.to;

List<String> names = to.list("John", "Fedor");

कृपया इसे जांचें - इसमें कई अन्य उपयोगी विशेषताएं हैं

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