2012-11-15 11 views
269

मैं निम्नलिखित कोड में के रूप में एक सूची प्रारंभ नहीं कर सकते हैं:जावा में सूची <String> ऑब्जेक्ट को प्रारंभ करने के लिए कैसे करें?

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

मैं निम्न त्रुटि का सामना:

Cannot instantiate the type List<String>

मैं कैसे List<String> का दृष्टांत कर सकते हैं?

उत्तर

531

यदि आप इसे का एक परस्पर श्रृंखला की तरह कार्यान्वित एक सूची - एक सरणी

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

LinkedList से अधिक कार्यान्वित एक सूची APIList के लिए आप देखेंगे कि यह कहता है:

Interface List<E> 

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

All Known Implementing Classes:

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

उन instantiated जा सकता है:

आप उस लिंक को चेक करते हैं, तो आपको कुछ class तों कि List लागू मिल जाएगा। उनके बारे में अधिक जानने के लिए उनके लिंक का उपयोग करें, आईई: यह जानने के लिए कि आपकी आवश्यकताओं को कौन सा फिट बैठता है।

3 सबसे अधिक इस्तेमाल किया लोगों को शायद इस प्रकार हैं:

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

बोनस:
आप भी इसे मूल्यों के साथ,, दृष्टांत कर सकते हैं एक आसान तरीका में, Arraysclass का उपयोग कर इस प्रकार है:

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

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

+1

Arrays.asList बहुत बढ़िया है, लेकिन जैसा कि आपको अब तक ध्यान देना चाहिए था, ऐसा करने में विफल रहता है जैसे 'int [] a = {1,2,3}; Println (Arrays.asList (क)); // [[मैं @ 70cdd2] ' –

+1

@ जेएआईआईएल। ऐसा नहीं हो रहा है कि क्या हो रहा है। यह एक तत्व की एक सूची है, जहां एक तत्व स्याही की एक सरणी है।वांछित व्यवहार संभवतः एक सूची या सरणी मुद्रित करने के लिए तीन तत्व 1, 2, और 3. –

+1

@ क्रिस्टोफर हैमरस्ट्रॉम की एक सूची थी, आप java.util.Arrays.toString (सरणी) का उपयोग कर सकते हैं ;, इसलिए यह सुविधा पहले ही दी गई है .. – Maxr1998

11

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

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

इस का उपयोग करें:

import java.util.ArrayList; 

... 

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

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

तरह:

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

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

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

या

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

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

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

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

सूची इंटरफ़ेस है, ArrayList सूची इंटरफ़ेस का एक कार्यान्वयन है। आपकी आवश्यकताओं के अनुरूप बेहतर कार्यान्वयन JavaDocs of the List interface पढ़कर पाया जा सकता है।

5

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

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

ये सूची impelemented वर्ग के कुछ,

ArrayList, LinkedList, Vector 

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

+0

वेक्टर जैसे कुछ विवाद का उपयोग [इस] (http://www.javapractices.com/topic/TopicAction.do?Id=65) और [यहां] (http://stackoverflow.com/questions/1792134/ एक-सहयोगी-कहा-न-उपयोग-जावा-util-वेक्टर अब-क्यों-नहीं)। थ्रेडिंग मुद्दों के कारण –

8

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

ArrayList - तत्वों

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

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

के एक कार्यान्वयन 7

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

JDK 7 और बाद में आप हीरे ऑपरेटर

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

इसके अलावा जानकारियां उपयोग कर सकते हैं यहां लिखा गया है Oracle documentation - Collections

1

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

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

और जानकारी: docs

3

JDK2

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

जेडीके 7

//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

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

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

0

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

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; 
     } 

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

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

संबंधित मुद्दे

 संबंधित मुद्दे