জাভাতে কীভাবে একটি নতুন তালিকা তৈরি করবেন


762

আমরা একটি Setহিসাবে তৈরি :

Set myset = new HashSet()

আমরা Listজাভাতে কীভাবে তৈরি করব ?


1
তালিকার জন্য জাভাদক। "সমস্ত জ্ঞাত বাস্তবায়নকারী ক্লাস: অ্যাবস্ট্রাকলিস্ট, অ্যাবস্ট্রাক্ট সেক্যুয়েন্সিলিস্ট, অ্যারেলিস্ট, অ্যাট্রিবিউটলিস্ট, কপিঅনরেটআরলিলিস্ট, লিংকডলিস্ট, রোললিস্ট, রোলঅনস্রোলডলিস্ট, স্ট্যাক, ভেক্টর"
কিটসুনওয়াইএমজি

121
এই প্রশ্নটি "জাভা তৈরি তালিকার" জন্য শীর্ষস্থানীয়
গুগলগুলির

52
এটি ভাল উত্তর সহ একটি ভাল প্রশ্ন। স্ট্যাক ওভারফ্লো এর অন্যতম লক্ষ্য হ'ল প্রোগ্রামিং প্রশ্নগুলির জন্য এক ধরণের ক্যানোনিকাল উত্তর তৈরি করা, কমপক্ষে সাইটের প্রতিষ্ঠাতা অনুসারে। সুতরাং দয়া করে যদি এই প্রলোভনকে প্রতিহত করতে পারেন তবে ভবিষ্যতে এই ধরণের পোস্টগুলি ডাউন-ভোটিং এড়াতে চেষ্টা করুন।
দ্য ইগনলেগস

উত্তর:


977
List myList = new ArrayList();

বা জেনারিক সহ ( জাভা 7 বা তার পরে)

List<MyType> myList = new ArrayList<>();

বা জেনেরিক সহ (পুরানো জাভা সংস্করণ)

List<MyType> myList = new ArrayList<MyType>();

68
নোট করুন যে অ্যারেলিস্ট কেবলমাত্র এক ধরণের তালিকা নয় - এবং প্রশ্ন সম্পর্কিত, হ্যাশসেটটি একমাত্র ধরণের সেট নয়।
স্লিম

17
আমি অবাক হয়েছি যে কেউ জাফিয়া
ডেভিড ম্যাসন

5
আপনি যদি কোনও আইডিই ব্যবহার করেন তবে আপনি সাধারণত সেখানে কোনও ধরণের শ্রেণিবিন্যাসও দেখতে পারেন যা আরও সুবিধাজনক হতে পারে। Eclipse এ ডিফল্ট শর্টকাট F4, এবং IDEA এ এটি Ctrl + H।
ডেভিড ম্যাসন

1
আমি যা বুঝি সেখান থেকে আপনি সি # এমএসডিএন
অ্যারেলিস্টের সাথে জেনেরিক

5
দ্বিতীয় স্পষ্টত ধরণের আর্গুমেন্ট <আমার টাইপ> জাভা 7 এবং 8 এর জন্য কেবল <> দিয়ে প্রতিস্থাপন করা যেতে পারে
জান্নিক

469

অতিরিক্তভাবে, আপনি যদি এমন একটি তালিকা তৈরি করতে চান যাতে জিনিসগুলি রয়েছে (যদিও এটি স্থির আকার হবে):

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");

15
সতর্কবাণীটি হ'ল এই ধরণের তালিকা (ASList দ্বারা প্রত্যাবর্তিত এক) অপরিবর্তনীয়।
এভ্রোম

70
@ অ্যাভ্রন - ভুল: এটি কেবলমাত্র আকারের আকার: আপনি আকার পরিবর্তন করতে পারবেন না, তবে আপনি বিষয়বস্তু (ক্যাভিয়েটের
সতর্কতা

অসাধারণ. সংক্ষিপ্ত হওয়ার জন্য আপনাকে ধন্যবাদ।
আর ক্লেন

1
তালিকায় যদি কেবলমাত্র একটি জিনিস থাকে তবে আমি অ্যারেএস.এললিস্টের পরিবর্তে সংগ্রহগুলি.সেনলেটোনলিস্ট () ব্যবহার করি। (তবে, আমি অনুমান করি, কেন জানি না))
মাইকেবি

@MikeB আপনি জানেন না কেন তারপর arrays.aslist বিদ্ধ
bharal

183

আমাকে সংক্ষিপ্ত করে কিছু যুক্ত করুন:

JDK

1. new ArrayList<String>();
2. Arrays.asList("A", "B", "C")

পেয়ারা

1. Lists.newArrayList("Mike", "John", "Lesly");
2. Lists.asList("A","B", new String [] {"C", "D"});

অপরিবর্তনীয় তালিকা

1. Collections.unmodifiableList(new ArrayList<String>(Arrays.asList("A","B")));
2. ImmutableList.builder()                                      // Guava
            .add("A")
            .add("B").build();
3. ImmutableList.of("A", "B");                                  // Guava
4. ImmutableList.copyOf(Lists.newArrayList("A", "B", "C"));     // Guava

খালি অপরিবর্তনীয় তালিকা

1. Collections.emptyList();
2. Collections.EMPTY_LIST;

চরিত্রের তালিকা

1. Lists.charactersOf("String")                                 // Guava
2. Lists.newArrayList(Splitter.fixedLength(1).split("String"))  // Guava

পূর্ণসংখ্যার তালিকা

Ints.asList(1,2,3);                                             // Guava

Ints.asListকোনও অপরিবর্তনীয় তালিকা তৈরি করে না, তবে একটি নির্দিষ্ট আকারের তালিকা প্রদত্ত ints (যেমন এটি সমর্থন করে List.set(int, Object)) দ্বারা সমর্থিত একটি তালিকা রয়েছে । "অক্ষরের অপরিবর্তনীয় তালিকা" এর দ্বিতীয় উদাহরণটিও অপরিবর্তনীয় নয় (আমি এই লাইনটি সরিয়ে ফেলব)।
Xaerxess

9
জেনারিক ব্যবহার না করা যে কোনও বিকাশকারী এটি পড়তে পারে তার জন্য একটি "সত্য" উদাহরণ তৈরি করে।
ন্যাটিক্স

60

জাভা 8 এ

স্থির আকারের একটি খালি খালি তালিকা তৈরি করতে (সংযোজন, অপসারণ ইত্যাদির মতো কাজগুলি সমর্থিত নয়):

List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported

একটি খালি খালি পরিবর্তনযোগ্য তালিকা তৈরি করতে:

List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));

জাভা 9 এ

একটি নতুন List.of(...)স্থিতিশীল কারখানা পদ্ধতি ব্যবহার:

List<Integer> immutableList = List.of(1, 2);

List<Integer> mutableList = new ArrayList<>(List.of(3, 4));

জাভা 10 এ

লোকাল ভেরিয়েবল টাইপ ইনফারেন্স ব্যবহার করে :

var list1 = List.of(1, 2);

var list2 = new ArrayList<>(List.of(3, 4));

var list3 = new ArrayList<String>();

এবং সেরা অনুশীলনগুলি অনুসরণ করুন ...

কাঁচা ধরণের ব্যবহার করবেন না

জাভা ৫ এর পর থেকে জেনেরিক ভাষার অংশ হয়ে গেছে - আপনার এগুলি ব্যবহার করা উচিত:

List<String> list = new ArrayList<>(); // Good, List of String

List list = new ArrayList(); // Bad, don't do that!

ইন্টারফেস থেকে প্রোগ্রাম

উদাহরণস্বরূপ, Listইন্টারফেসে প্রোগ্রাম :

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

পরিবর্তে:

ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!

1
হাই, আপনি দয়া করে বলতে পারেন যে আমি কোথায় এই পার্থক্যগুলি এবং জাভার বিবর্তন শিখতে পারি? খুব আকর্ষণীয় বলে মনে হচ্ছে!
shiv

31

প্রথম পড়া এই , তারপর পড়া এই এবং এই । 10 এর মধ্যে 9 বার আপনি এই দুটি প্রয়োগের একটি ব্যবহার করবেন।

বস্তুত, শুধু পড়া সংগ্রহগুলি ফ্রেমওয়ার্ক থেকে সূর্যের গাইড


11
এমনকি আমি "10 এর মধ্যে 8 বার" যোগ করব আপনি অ্যারেলিস্টটি ব্যবহার করবেন, কারণ এটি কেবল 10 এর মধ্যে 9.9 বারের মধ্যে কিছু যায় আসে না
জোছিম সৌর

1
লিংকডলিস্ট শব্দার্থগতভাবে উপযুক্ত যখন আপনি কেবলমাত্র শেষগুলি সম্পর্কে যত্নশীল হন।
অ্যাডাম জ্যাসকিউইচ

লিঙ্কডলিস্টগুলি দুর্দান্ত যদি আপনি কেবল তাদের উপর পুনরাবৃত্তি করতে চলেছেন। আমার কাছে মনে হয়, লিঙ্কযুক্ত তালিকাগুলি আরও মার্জিত, তবে সম্ভবত এটি জাভার আগে আমি লিস্প শিখেছি।
কার্লপি

@ কার্ল্প একমত আমি বলব এটি অ্যারেলিস্ট এবং লিংকডলিস্টের মধ্যে বেশিরভাগ সময় প্রায় 50/50, এবং উত্তরটি অপারেশনগুলির জটিলতা সম্পর্কে সর্বদা হয় না; প্রায়শই এটি হ'ল সমস্যাটি সঠিকভাবে মনে হয়।
অ্যাডাম জ্যাসকিউইজ

1
আমি প্রায় সবসময় ব্যবহৃত ArrayList। যদি আমি কেবল একটি তালিকার শেষের সাথে কাজ করি তবে এটি একটি প্রাসঙ্গিক (বা সারি) এবং আমি ArrayDequeপ্রয়োগটি ব্যবহার করি । কারণটি হ'ল যদিও অ্যারে-ভিত্তিক প্রয়োগগুলি খালি স্লটগুলিতে কিছু মেমরি নষ্ট করতে পারে (যখন আমি প্রয়োজনীয় সক্ষমতা অনুমান করতে পারি না), ছোট সংগ্রহগুলির জন্য এটি একটি লিঙ্কযুক্ত তালিকার সমস্ত নোড উদাহরণগুলির ওভারহেডের সাথে তুলনীয় ( বা deque)। এবং বিনিময়ে, আমি এলোমেলো অ্যাক্সেস পাই। কি অনন্য সুবিধা LinkedListপ্রদান করে?
এরিকসন

21
//simple example creating a list form a string array

String[] myStrings = new String[] {"Elem1","Elem2","Elem3","Elem4","Elem5"};

List mylist = Arrays.asList(myStrings );

//getting an iterator object to browse list items

Iterator itr= mylist.iterator();

System.out.println("Displaying List Elements,");

while(itr.hasNext())

  System.out.println(itr.next());

21

জাভা 7 যেহেতু আপনার জেনেরিক ইনস্ট্যান্স তৈরির জন্য টাইপ অনুমিতি রয়েছে তাই অ্যাসাইনমেন্টের ডানদিকে জেনেরিক পরামিতিগুলি নকল করার দরকার নেই:

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

একটি নির্দিষ্ট আকারের তালিকাটি এই হিসাবে সংজ্ঞায়িত করা যেতে পারে:

List<String> list = Arrays.asList("foo", "bar");

অপরিবর্তনীয় তালিকার জন্য আপনি পেয়ারা গ্রন্থাগারটি ব্যবহার করতে পারেন :

List<String> list = ImmutableList.of("foo", "bar");

এই ঘোষণার তালিকাটি সম্পর্কে আমার কাছে একটি প্রশ্ন আছে <স্ট্রিং> তালিকা = অ্যারে.এএসলিস্ট ("ফু", "বার"); আমি ভাবছি ঘোষণাপত্রে তালিকাটি কোনও বস্তু কিনা?

20

তালিকা ঠিক যেমন একটি ইন্টারফেস সেট

হ্যাশসেটটি এমন একটি সেট এর বাস্তবায়ন যা কার্য সম্পাদন / প্রদর্শন / সরানোর ক্ষেত্রে নির্দিষ্ট বৈশিষ্ট্যযুক্ত, অ্যারেলিস্ট একটি তালিকার খালি বাস্তবায়ন।

যদি আপনার সম্পর্কিত ইন্টারফেসগুলির জন্য ডকুমেন্টেশনগুলির দিকে নজর থাকে তবে আপনি "সমস্ত জ্ঞাত বাস্তবায়নকারী শ্রেণি" খুঁজে পাবেন এবং কোনটি আপনার প্রয়োজনের জন্য বেশি উপযুক্ত তা আপনি সিদ্ধান্ত নিতে পারেন।

সম্ভাবনা হ'ল এটি অ্যারেলিস্ট


18

Listমত ইন্টারফেস Setএবং আছে ArrayListএবং LinkedListযেমন সাধারণ কাজের বাস্তবায়নের

আমরা তালিকা তৈরি করতে পারি:

 List<String> arrayList = new ArrayList<>();
 List<String> linkedList = new LinkedList<>(); 

আমরা একটি স্থির-আকারের তালিকাও তৈরি করতে পারি:

List<String> list = Arrays.asList("A", "B", "C");

আমরা প্রায়শই প্রয়োগের ArrayListবিপরীতে ব্যবহার করব LinkedList:

  1. LinkedList বস্তুর জন্য প্রচুর স্থান ব্যবহার করে এবং যখন আমাদের প্রচুর উপাদান থাকে তখন খারাপভাবে সঞ্চালন করে।
  2. ইনডেক্সযুক্ত অপারেশনের ক্ষেত্রে LinkedListও (1) এর তুলনায় ও (এন) সময় প্রয়োজন ArrayList
  3. আরও তথ্যের জন্য এই লিঙ্কটি দেখুন।

Arrays.asListউপরে তৈরি তালিকাটি কাঠামোগতভাবে সংশোধন করা যায় না তবে এর উপাদানগুলি এখনও সংশোধন করা যায়।

জাভা 8

অনুযায়ী ডক , পদ্ধতি Collections.unmodifiableListনির্দিষ্ট করা তালিকা একজন unmodifiable দৃশ্য ফেরৎ। আমরা এটি পেতে পারি:

Collections.unmodifiableList(Arrays.asList("A", "B", "C"));

জাভা 9

যদি আমরা তখন জাভা 9 ব্যবহার করি তবে:

List<String> list = List.of("A", "B");

জাভা 10

ক্ষেত্রে আমরা জাভা 10 তারপর পদ্ধতি Collectors.unmodifiableListজাভা চালু সত্যিই unmodifiable তালিকার একটি দৃষ্টান্ত ফিরে আসবে 9. এই চেক উত্তর পার্থক্য সম্পর্কে আরও তথ্যের জন্য Collections.unmodifiableList বনাম Collectors.unmodifiableListমধ্যে জাভা 10


9

কখনও কখনও - তবে কেবল খুব কমই - নতুন অ্যারেলিস্টের পরিবর্তে আপনি একটি নতুন লিংকডলিস্ট চাইতে পারেন। অ্যারেলিস্ট দিয়ে শুরু করুন এবং যদি আপনার কার্য সম্পাদনের সমস্যা এবং প্রমাণ রয়েছে যে তালিকাটি সমস্যা, এবং সেই তালিকাতে প্রচুর পরিমাণে যুক্ত এবং মুছে ফেলা - তবে - আগে নয় - একটি লিঙ্কলিস্টে স্যুইচ করুন এবং দেখুন যে জিনিসগুলি উন্নতি করছে কিনা। তবে প্রধানত, অ্যারেলিস্টের সাথে লেগে থাকুন এবং সব ঠিক হয়ে যাবে।


9
List list = new ArrayList();

বা জেনেরিক সহ

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

আপনি অবশ্যই অবশ্যই কোনও ধরণের ভেরিয়েবল, যেমন পূর্ণসংখ্যার সাথে স্ট্রিং প্রতিস্থাপন করতে পারেন।



7

গুগল সংগ্রহগুলি ব্যবহার করে , আপনি তালিকা শ্রেণিতে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করতে পারেন

import com.google.common.collect.Lists;

// ...

List<String> strings = Lists.newArrayList();

List<Integer> integers = Lists.newLinkedList();

ভার থেকে আরম্ভের জন্য ও থেকে আরম্ভ করার জন্য ওভারলোড রয়েছে Iterable<T>

এই পদ্ধতির সুবিধাটি হ'ল আপনার জেনেরিক প্যারামিটারটি স্পষ্টভাবে নির্ধারণের দরকার নেই যেমন আপনি নির্মাতার সাথে করেন - সংকলকটি ভেরিয়েবলের ধরণ থেকে এটি নির্ধারণ করবে।


6
List<Object> nameOfList = new ArrayList<Object>();

আপনার আমদানি করতে হবে Listএবং ArrayList


6

আরো বিকল্প না ভাল, খারাপ না, শুধু বিভিন্ন জাভা 8 সঙ্গে একই জিনিস করে, এবং যদি আপনি তালিকা সঙ্গে কিছু অতিরিক্ত কাজ করতে চাই, প্রবাহের আপনি আরো বিকল্প (ফিল্টার, মানচিত্র, কমাতে, ইত্যাদি) প্রদান করবে

List<String> listA = Stream.of("a", "B", "C").collect(Collectors.toList());
List<Integer> listB = IntStream.range(10, 20).boxed().collect(Collectors.toList());
List<Double> listC = DoubleStream.generate(() -> { return new Random().nextDouble(); }).limit(10).boxed().collect(Collectors.toList());
LinkedList<Integer> listD = Stream.iterate(0, x -> x++).limit(10).collect(Collectors.toCollection(LinkedList::new));

6

জাভা 9, আপনি একটি তৈরি করতে নিম্নোক্ত কাজ করতে সক্ষম অপরিবর্তনীয় List :

List<Integer> immutableList = List.of(1, 2, 3, 4, 5);

List<Integer> mutableList = new ArrayList<>(immutableList);

6

বিকল্প হিসাবে আপনি এখানে ডাবল ব্রেস সূচনা ব্যবহার করতে পারেন:

List<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};

2
এটি একটি ব্যয়বহুল অপারেশন। আপনি এখানে অ্যারেলিস্টের একটি বেনামে সাবক্লাস তৈরি করছেন।
বিক্রম বডিচেরলা

@ ভিক্রামবোডিচরেলা আমি একমত এটি সিনট্যাক্স চিনির সম্পর্কে আরও বেশি।
রাগান_গোফার

5

একটি সেট এবং একটি তালিকা তৈরির অনেক উপায় রয়েছে। হ্যাশসেট এবং অ্যারেলিস্ট কেবল দুটি উদাহরণ। আজকাল সংগ্রহের সাথে জেনেরিকগুলি ব্যবহার করা মোটামুটি সাধারণ। আমি আপনাকে পরামর্শ দিচ্ছি তারা কী সেগুলি দেখুন

এটি জাভা অন্তর্নির্মিত সংগ্রহের জন্য একটি ভাল ভূমিকা। http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html


5
List arrList = new ArrayList();

এটি নীচে প্রস্তাবিত হিসাবে জেনেরিকগুলি আরও ভাল ব্যবহার করুন:

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

arrList.add("one");

যদি আপনি লিঙ্কলিস্ট ব্যবহার করেন তবে।

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

4

Eclipse সংগ্রহ ব্যবহার করে আপনি এর মতো একটি তালিকা তৈরি করতে পারেন:

List<String> list1 = Lists.mutable.empty();
List<String> list2 = Lists.mutable.of("One", "Two", "Three");

যদি আপনি একটি অপরিবর্তনীয় তালিকা চান:

ImmutableList<String> list3 = Lists.immutable.empty();
ImmutableList<String> list4 = Lists.immutable.of("One", "Two", "Three");

আদিম তালিকা ব্যবহার করে আপনি অটো-বক্সিং এড়াতে পারবেন। আপনি কীভাবে তালিকা তৈরি করতে চান তা এখানে:

MutableIntList list5 = IntLists.mutable.empty();
MutableIntList list6 = IntLists.mutable.of(1, 2, 3);

ImmutableIntList list7 = IntLists.immutable.empty();
ImmutableIntList list8 = IntLists.immutable.of(1, 2, 3);

সমস্ত 8 টি আদিমতার জন্য বৈকল্পিক রয়েছে।

MutableLongList longList       = LongLists.mutable.of(1L, 2L, 3L);
MutableCharList charList       = CharLists.mutable.of('a', 'b', 'c');
MutableShortList shortList     = ShortLists.mutable.of((short) 1, (short) 2, (short) 3);
MutableByteList byteList       = ByteLists.mutable.of((byte) 1, (byte) 2, (byte) 3);
MutableBooleanList booleanList = BooleanLists.mutable.of(true, false);
MutableFloatList floatList     = FloatLists.mutable.of(1.0f, 2.0f, 3.0f);
MutableDoubleList doubleList   = DoubleLists.mutable.of(1.0, 2.0, 3.0);

দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ।


4

নীচে কয়েকটি তালিকা আপনি তালিকা তৈরি করতে পারেন।

  • এটি স্থির আকারের সাথে একটি তালিকা তৈরি করবে, উপাদান যুক্ত / অপসারণ সম্ভব নয়, java.lang.UnsupportedOperationExceptionআপনি যদি এটি করার চেষ্টা করেন তবে এটি একটি নিক্ষেপ করবে ।

    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});


  • নিম্নলিখিত সংস্করণটি এমন একটি সহজ তালিকা যেখানে আপনি যে কোনও সংখ্যক উপাদান যুক্ত / মুছে ফেলতে পারবেন।

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


  • এইভাবে LinkedListজাভাতে কীভাবে তৈরি করা যায়, তালিকায় যদি আপনাকে ঘন ঘন সন্নিবেশ / মুছতে হয়, তবে LinkedListপরিবর্তে আপনার ব্যবহার করা উচিতArrayList

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

1
আপনি ব্যবহার করতে পারেন Arrays.asList("Male", "Female")
জনি

3

এটা চেষ্টা কর:

List<String> messages = Arrays.asList("bla1", "bla2", "bla3");

বা:

List<String> list1 = Lists.mutable.empty(); // Empty
List<String> list2 = Lists.mutable.of("One", "Two", "Three");

2

আপনার যদি কোনও একক সত্তা সহ সিরিয়ালাইজযোগ্য, অপরিবর্তনীয় তালিকা প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন:

List<String> singList = Collections.singletonList("stackoverlow");

2

জাভাতে অ্যারে তালিকা ঘোষণার মতো

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable  

জাভাতে অ্যারে তালিকা তৈরি এবং সূচনা করতে পারে এমন অনেকগুলি উপায় রয়েছে।

 1) List list = new ArrayList();

 2) List<type> myList = new ArrayList<>();

 3) List<type> myList = new ArrayList<type>();

 4) Using Utility class

    List<Integer> list = Arrays.asList(8, 4);
    Collections.unmodifiableList(Arrays.asList("a", "b", "c"));

 5) Using static factory method

    List<Integer> immutableList = List.of(1, 2);


 6) Creation and initializing at a time

    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});



 Again you can create different types of list. All has their own characteristics

 List a = new ArrayList();
 List b = new LinkedList();
 List c = new Vector(); 
 List d = new Stack(); 
 List e = new CopyOnWriteArrayList();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.