জাভাতে তালিকা <স্ট্রিং> অবজেক্টটি কীভাবে সূচনা করবেন?


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
অ্যারে.এএসলিস্টটি দুর্দান্ত তবে আপনার এখনই লক্ষ্য করা উচিত ছিল যে int[] a = {1,2,3}; System.out.println(Arrays.asList(a)); // [[I@70cdd2]
কোনও

1
@ জাইল এটি কি ঘটছে তা নয় এটি একটি উপাদানের একটি তালিকা, যেখানে এক উপাদান উপাদানগুলির একটি অ্যারে। চেয়েছিলেন আচরণ সম্ভবত তিনটি উপাদান 1, 2 একটি তালিকা ছিল, এবং 3.
Christoffer Hammarström

1
একটি তালিকা বা একটি অ্যারে প্রিন্ট করতে ক্রিস্টোফার হ্যামারস্ট্রিম, আপনি java.util.Arrays.toString (অ্যারে) ব্যবহার করতে পারেন; সুতরাং এই বৈশিষ্ট্যটি ইতিমধ্যে দেওয়া আছে ..
ম্যাক্সার 1998

1
মত ভেক্টর কিছু discorage ব্যবহার এই এবং এখানে । থ্রেডিং ইস্যুগুলির কারণে
নুনো রাফায়েল ফিগুয়েরডো

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

তালিকাটি একটি ইন্টারফেস , আপনি কোনও ইন্টারফেস ইনস্ট্যান্ট করতে পারবেন না, কারণ ইন্টারফেসটি একটি সম্মেলন, কোন পদ্ধতিতে আপনার ক্লাস থাকা উচিত have তাত্পর্যপূর্ণ করার জন্য, আপনাকে সেই ইন্টারফেসের কিছু উপলব্ধি (বাস্তবায়ন) প্রয়োজন। তালিকা ইন্টারফেসের খুব জনপ্রিয় বাস্তবায়ন সহ নীচের কোডটি চেষ্টা করুন:

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

তালিকাটি কেবল একটি ইন্টারফেস, কিছু জেনেরিক তালিকার সংজ্ঞা। আপনাকে এই তালিকা ইন্টারফেসটির একটি প্রয়োগকরণ সরবরাহ করতে হবে। দুটি অতি সাধারণ:

অ্যারেলিস্ট - একটি অ্যারেতে প্রয়োগ করা একটি তালিকা

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

লিংকডলিস্ট - উপাদানগুলির একটি আন্তঃসংযুক্ত শৃঙ্খলার মতো কার্যকর করা একটি তালিকা

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

9

বেশিরভাগ ক্ষেত্রে আপনি সহজ চান ArrayList- এর একটি বাস্তবায়নList

জেডিকে ভার্সন Before এর আগে

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

জেডিকে 7 এবং পরে আপনি হীরা অপারেটরটি ব্যবহার করতে পারেন

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

আরও তথ্য এখানে লিখিত হয় ওরাকল ডকুমেন্টেশন - সংগ্রহ


7

আপনি কোন ধরণের তালিকা ব্যবহার করতে চান তার উপর নির্ভর করে something

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

তোমাকে যেতে হবে

তালিকাটি ইন্টারফেস, অ্যারেলিস্ট হ'ল তালিকার ইন্টারফেসের একটি প্রয়োগ। আপনার প্রয়োজনের সাথে আরও ভাল প্রয়োগ করতে পারে এমন আরও বাস্তবায়ন তালিকা ইন্টারফেসের জাভডোকগুলি পড়ে পাওয়া যাবে ।


7

আপনি যদি কেবলমাত্র এতে একটি অবজেক্টের সাথে অপরিবর্তনীয় তৈরি করতে চান তবে আপনি এই API টি ব্যবহার করতে পারেন:List<T>

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

আরও তথ্য: ডকস


5

তালিকা একটি ইন্টারফেস। আপনি এটি আরম্ভ করার জন্য তালিকা ব্যবহার করতে পারবেন না।

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

এগুলি কয়েকটি তালিকাভুক্ত ক্লাসগুলির মধ্যে রয়েছে,

ArrayList, LinkedList, Vector

আপনি আপনার প্রয়োজন অনুযায়ী এর যে কোনওটি ব্যবহার করতে পারেন। এই প্রতিটি শ্রেণীর নিজস্ব বৈশিষ্ট্য রয়েছে।


মত ভেক্টর কিছু discorage ব্যবহার এই এবং এখানে । থ্রেডিং ইস্যুগুলির কারণে
নুনো রাফায়েল ফিগুয়েরডো

3

কেবলমাত্র, এই প্রশ্নটি নিয়ে এখনও যে কেউ স্থির রয়েছে। কারণ, আমি একজন বা দু'জন নতুন ব্যবহারকারীকে আবার একই প্রশ্ন জিজ্ঞাসা করতে দেখছি এবং প্রত্যেকে বলছে যে, না আপনি তা করতে পারবেন না, প্রিয় বিচক্ষণতা , এখানে প্রদত্ত সমস্ত উত্তর ছাড়াও আমি অতিরিক্ত তথ্য সরবরাহ করতে চাই - হ্যাঁ আপনি আসলে পারেন do, list list = নতুন তালিকা (); তবে ইন্টারফেসের সমস্ত পদ্ধতির প্রয়োগ বাস্তবায়নের ব্যয়ে। ধারণাটি কেবল তালিকার তালিকা নয় = নতুন তালিকা (); কিন্তু

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");

দয়া করে এটি পরীক্ষা করে দেখুন - এতে আরও অনেক দরকারী বৈশিষ্ট্য রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.