অ্যারে থেকে অ্যারেলিস্ট তৈরি করুন


3594

আমার কাছে এমন একটি অ্যারে রয়েছে যা এর মতো শুরু করা হয়েছিল:

Element[] array = {new Element(1), new Element(2), new Element(3)};

আমি এই অ্যারেটিকে ArrayListক্লাসের একটি বস্তুতে রূপান্তর করতে চাই ।

ArrayList<Element> arraylist = ???;

49
জাভা 9 -> তালিকায় <স্ট্রিং> তালিকা = তালিকা.ওফ ("হ্যালো", "ওয়ার্ল্ড", "থেকে", "জাভা");
মেরেক এম

18
@ মেরেকএম এই উত্তরটি ভুল, কারণ এটি কোনও উত্তর দেয় না ArrayList। পোস্টার বিশেষত এর জন্য জিজ্ঞাসা করেছিল।
ডোরিয়ান গ্রে

4
আমি মনে করি তিনি তালিকা ইন্টারফেসটি ব্যবহার করেন নি, কারণ এটি সর্বোত্তম অনুশীলন। তবে আপনি যদি এখানে চান তা হ'ল - নতুন অ্যারেলিস্ট <> (তালিকা.ওফ ("হ্যালো", "ওয়ার্ল্ড", "থেকে", "জাভা"));
মেরেকএম

10
বিন্দুটি ইন্টারফেসটি ব্যবহার করার বিষয়ে নয়, পয়েন্টটি হ'ল আপনার সমাধানে, ফিরে আসা তালিকাটি অবিশ্বাস্য। এটি সমস্যা হতে পারে এবং কারণ হিসাবে তিনি একটি অ্যারেলিস্ট চেয়েছিলেন
ডোরিয়ান গ্রে

উত্তর:


4601
new ArrayList<>(Arrays.asList(array));

361
হাঁ। এবং (সর্বাধিক সাধারণ) ক্ষেত্রে যেখানে আপনি কেবল একটি তালিকা চান, new ArrayListসেইসাথে কলটিও অপ্রয়োজনীয়।
কলম

143
@ লরন - স্রেফ ব্যবহার করুনList<ClassName> list = Arrays.asList(array)
পুল 18

247
@ ক্যালাম এবং @ পুল - অ্যালেক্স মিলারের উত্তরে নীচে উল্লিখিত হিসাবে, Arrays.asList(array)এটি কোনও নতুন ArrayListঅবজেক্টে পাস না করে ব্যবহার করা তালিকার আকার ঠিক করবে। ArrayListএটিকে ব্যবহার করার অন্যতম সাধারণ কারণ হ'ল এটির আকার পরিবর্তনশীল করতে সক্ষম হবে এবং আপনার পরামর্শ এটিকে আটকাবে।
কোড জকি

130
অ্যারে.এএসলিস্ট () একটি ভয়াবহ ফাংশন এবং আপনার রিটার্নের মানটি কেবল কখনও ব্যবহার করা উচিত নয়। এটি তালিকার টেম্পলেটটি ভেঙে যায়, তাই এটি এখানে অপ্রয়োজনীয় মনে হলেও সর্বদা এটি এখানে নির্দেশিত ফর্মটিতে ব্যবহার করুন। ভাল উত্তর.
আদম

83
@ অ্যাডাম দয়া করে java.util.List এর জাভাদোক অধ্যয়ন করুন। সংযোজনের চুক্তিটি তাদেরকে একটি অসমর্থিত অপেশান ধারণাটি নিক্ষেপ করতে দেয়। docs.oracle.com/javase/7/docs/api/java/util/… স্বীকারোক্তিভাবে, কোনও অবজেক্ট-ভিত্তিক দৃষ্টিভঙ্গি থেকে এটি খুব সুন্দর নয় যে অনেক সময় আপনাকে সংগ্রহটি ব্যবহারের জন্য কংক্রিটের বাস্তবায়ন জানতে হবে - এটি কাঠামো সহজ রাখার জন্য ব্যবহারিক নকশার পছন্দ ছিল।
lbalazscs

918

প্রদত্ত:

Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };

সহজ উত্তরটি হ'ল:

List<Element> list = Arrays.asList(array);

এটি ভাল কাজ করবে। তবে কিছু সতর্কতা:

  1. তালিকা থেকে প্রত্যাবর্তিত তালিকাটির স্থির আকার রয়েছে । সুতরাং, আপনি যদি আপনার কোডটিতে ফিরে আসা তালিকা থেকে উপাদানগুলি যুক্ত করতে বা সরাতে সক্ষম হতে চান তবে আপনাকে এটিকে একটি নতুন মোড়ানো দরকার ArrayList। অন্যথায় আপনি একটি পাবেন UnsupportedOperationException
  2. থেকে ফিরে আসা তালিকাটি asList()মূল অ্যারে দ্বারা সমর্থিত। আপনি যদি মূল অ্যারেটি পরিবর্তন করেন তবে তালিকাটিও সংশোধন করা হবে। এটি অবাক হতে পারে।

6
উভয় অপারেশন সময় জটিলতা কি? আমার অর্থ স্পষ্টভাবে অ্যারেলিস্ট নির্মাণের সাথে এবং ব্যবহার না করে।
অভিশাপ 2

35
অ্যারে.এএসলিস্ট () কেবল বিদ্যমান অ্যারে মোড়ানো দ্বারা একটি অ্যারেলিস্ট তৈরি করে তাই এটি ও (1)।
অ্যালেক্স মিলার

27
নতুন অ্যারেলিস্ট () এ মোড়ানোর ফলে স্থির আকারের তালিকার সমস্ত উপাদান পুনরাবৃত্তি হবে এবং নতুন অ্যারেলিস্টে যুক্ত হবে সুতরাং ও (এন)।
অ্যালেক্স মিলার

8
AsList () দ্বারা ফিরিয়ে দেওয়া তালিকার প্রয়োগটি তালিকার বেশ কয়েকটি পদ্ধতি প্রয়োগ করে না (যেমন অ্যাড (), অপসারণ (), সাফ () ইত্যাদি ... যা অসমর্থিত অপারেশন এক্সপেকশনকে ব্যাখ্যা করে। অবশ্যই একটি
সাবধানবাণী

8
যখন প্রশ্নটি "অ্যারেলিস্ট শ্রেণীর কোনও বিষয়" জিজ্ঞাসা করে তখন আমি মনে করি যে এটি শ্রেণিটি বোঝায় এটি ধরে নেওয়া যুক্তিযুক্ত java.util.ArrayList। অ্যারে.এএসলিস্ট আসলে এমন ফিরিয়ে দেয় java.util.Arrays.ArrayListযা instanceofঅন্য শ্রেণীর নয়। সুতরাং একটি তৃতীয় সতর্কতা হ'ল আপনি যদি উপরের প্রয়োজনীয় প্রসঙ্গে এটি ব্যবহার করার চেষ্টা করেন তবে এটি কাজ করবে না।
ডেভ এল

352

(পুরানো থ্রেড, তবে মাত্র 2 সেন্টে কেউ পেয়ারা বা অন্যান্য লিবিস এবং কিছু অন্যান্য বিবরণ উল্লেখ করে না)

আপনি যদি পারেন, পেয়ারা ব্যবহার করুন

পেয়ারা পথটি দেখানো মূল্যবান, যা এই শেননিগানকে ব্যাপকভাবে সরল করে:

ব্যবহার

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

ব্যবহার করুন ImmutableListশ্রেণী ও এর of()এবং copyOf()কারখানা পদ্ধতি (উপাদান নাল না হতে পারে) :

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array

একটি পরিবর্তনীয় তালিকার জন্য

ব্যবহার করুন Listsশ্রেণী ও এর newArrayList()কারখানা পদ্ধতি:

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection
List<String> l2 = Lists.newArrayList(aStringArray);               // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

অন্যান্য ক্লাসে অন্যান্য ডেটা স্ট্রাকচারের জন্য অনুরূপ পদ্ধতিগুলিও নোট করুন, উদাহরণস্বরূপ Sets

পেয়ারা কেন?

টাইপ-সুরক্ষার জন্য জেনেরিকের কারণে বিশৃঙ্খলা হ্রাস করা প্রধান আকর্ষণ হতে পারে, কারণ পেয়ারা কারখানার পদ্ধতি ব্যবহারের ফলে বেশিরভাগ সময় এই ধরণের অনুমান করা যায়। যাইহোক, জাভা 7 নতুন ডায়মন্ড অপারেটরের সাথে আসার পরে এই যুক্তিতে কম জল রয়েছে।

তবে এটি একমাত্র কারণ নয় (এবং জাভা 7 এখনও সর্বত্র নেই): শর্টহ্যান্ড সিনট্যাক্সটিও খুব সহজ, এবং উপরের মতো পদ্ধতিগুলির সূচনাবিদরা আরও অভিব্যক্তিপূর্ণ কোড লেখার অনুমতি দেয়। আপনি একটি পেয়ারা কল করে যা বর্তমান জাভা সংগ্রহগুলির সাথে 2 নেয়।


যদি আপনি না পারেন ...

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

জেদেকে এর Arraysক্লাস এবং এর asList()কারখানার পদ্ধতিটি ব্যবহার করুন, যা একটি দিয়ে মোড়ানো Collections.unmodifiableList():

List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));

মনে রাখবেন যে, ফিরে টাইপ asList()একটি হল Listএকটি কংক্রিট ব্যবহার ArrayListবাস্তবায়ন কিন্তু তা না হয় java.util.ArrayList । এটি একটি অভ্যন্তরীণ প্রকার, যা একটিকে অনুকরণ করে ArrayListতবে প্রকৃতপক্ষে পাস করা অ্যারেটিকে সরাসরি উল্লেখ করে এবং "লেখার মাধ্যমে" তৈরি করে (পরিবর্তনগুলি অ্যারেতে প্রতিফলিত হয়)।

এটি Listকেবলমাত্র একটি প্রসারিত করার মাধ্যমে API এর কয়েকটি পদ্ধতির মাধ্যমে পরিবর্তনগুলি নিষিদ্ধ করেছে AbstractList(সুতরাং উপাদানগুলি যুক্ত করা বা অপসারণ করা অসমর্থিত) তবে এটি কলগুলিকে set()উপাদানগুলিকে ওভাররাইড করার অনুমতি দেয় । সুতরাং এই তালিকাটি সত্যই স্থাবর নয় এবং একটি কলটি asList()মোড়ানো উচিত Collections.unmodifiableList()

আপনার যদি পরিবর্তনীয় তালিকার প্রয়োজন হয় তবে পরবর্তী পদক্ষেপটি দেখুন।

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

উপরের মতো একই, তবে একটি আসল সাথে আবৃত java.util.ArrayList:

List<String> l1  = new ArrayList<String>(Arrays.asList(array));    // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array));          // Java 1.7+
List<String> l2  = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b"));       // Java 1.7+

শিক্ষাগত উদ্দেশ্যগুলির জন্য: দ্য গুড ওল 'ম্যানুয়াল ওয়ে

// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
  final List<T> l = new ArrayList<T>(array.length);

  for (final T s : array) {
    l.add(s);
  }
  return (l);
}

// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
  final List l = new ArrayList(array.length);

  for (int i = 0; i < array.length; i++) {
    l.add(array[i]);
  }
  return (l);
}

27
+1 তবে মনে রাখবেন যে Listফিরে Arrays.asListআসাটি এমন পরিবর্তনীয় যা আপনি এখনও setউপাদানগুলি করতে পারেন - এটি কেবল পুনরায় আকার পরিবর্তনযোগ্য নয়। পেয়ারা ছাড়া অপরিবর্তনীয় তালিকার জন্য আপনি উল্লেখ করতে পারেন Collections.unmodifiableList
পল বেলোরা

1
@ হাইলেম আপনার বিভাগে শিক্ষাগত উদ্দেশ্যগুলির জন্য: গুড ওল 'ম্যানুয়াল ওয়ে , arrayToListজাভা 1.5+ এর জন্য আপনার ভুল। আপনি তালিকা instanciating হয় String, এবং পরিবর্তে জেনেরিক প্যারামিটার প্রকার ব্যবহারের দেওয়া অ্যারে থেকে স্ট্রিং পুনরুদ্ধার করতে চেষ্টা T। এর বাইরে, ভাল উত্তর এবং ম্যানুয়াল উপায় সহ একমাত্র থাকার জন্য +1।
আফসান্টোস

আইডি আপনার বিভাগটির নাম পরিবর্তন করে "যদি আপনি না পারেন ... / অপরিবর্তনীয় তালিকার জন্য" "একটি অবিস্মরণীয় তালিকা জন্য" করতে পারেন কারণ এটি পরে মোড়ানো অ্যারেতে পরিবর্তিত হতে পারে। এটি এখনও O(1), তবে অপরিবর্তনীয়তার জন্য আপনাকে একটি অনুলিপি তৈরি করতে হবে, যেমন, দ্বারা Collections.unmodifiableList(new ArrayList<>(Arrays.asList(array)))
মাআর্টিনাস

232

যেহেতু এই প্রশ্নটি বেশ পুরানো, তাই অবাক করে দিয়েছি যে কেউ এখনও সহজতম ফর্মটি প্রস্তাব করেনি:

List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

জাভা 5 হিসাবে Arrays.asList(), একটি ভার্সেস প্যারামিটার লাগে এবং আপনাকে পরিষ্কারভাবে অ্যারে তৈরি করতে হবে না।


7
বিশেষত,List<String> a = Arrays.asList("first","second","third")
18446744073709551615

209
new ArrayList<T>(Arrays.asList(myArray));

নিশ্চিত করুন যে myArrayএটি একই ধরণের T। উদাহরণস্বরূপ আপনি যদি List<Integer>একটি অ্যারে থেকে একটি তৈরি করার চেষ্টা করেন তবে আপনি একটি সংকলক ত্রুটি পাবেন int


103

আরেকটি উপায় (যদিও মূলত new ArrayList(Arrays.asList(array))সমাধানের কার্য সম্পাদনের ভিত্তিতে সমান :

Collections.addAll(arraylist, array);

96

জাভা 9

ইন জাভা 9 , আপনি ব্যবহার করতে পারেন List.ofযাতে তৈরি করার জন্য স্ট্যাটিক কারখানা পদ্ধতি Listআক্ষরিক। নিম্নলিখিত মত কিছু:

List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));

এটি তিনটি উপাদানযুক্ত একটি অপরিবর্তনীয় তালিকা ফিরিয়ে আনবে । যদি আপনি কোনও পরিবর্তনীয় তালিকা চান , তবে সেই তালিকাটি ArrayListকনস্ট্রাক্টরকে দিন:

new ArrayList<>(List.of(// elements vararg))

জেপ 269: সংগ্রহের জন্য সুবিধার কারখানা পদ্ধতি

JEP 269 জাভা সংগ্রহগুলি API এর জন্য কিছু সুবিধাজনক কারখানার পদ্ধতি সরবরাহ করে । এই অপরিবর্তনীয় স্ট্যাটিক কারখানা পদ্ধতি এর মধ্যে নির্মাণ হয় List, Setএবং Mapজাভা 9 এবং তার পরে ইন্টারফেসগুলি।


লিস্ট.ওফ () মূল প্রশ্নের অনুরোধ হিসাবে java.util.ArrayList এর কোনও উদাহরণ ফিরিয়ে দেবে না। সুতরাং শুধুমাত্র দ্বিতীয় বিকল্পটি একটি বৈধ উত্তর।
tquadrat

84

আপনার সম্ভবত কেবল একটি তালিকা দরকার, অ্যারেলিস্ট নয়। সেক্ষেত্রে আপনি ঠিক করতে পারেন:

List<Element> arraylist = Arrays.asList(array);

8
এটি মূল ইনপুট অ্যারে দ্বারা সমর্থিত হবে, এজন্য আপনি (সম্ভবত) এটি একটি নতুন অ্যারেলিস্টে মোড়তে চান।
বিল করুন

16
এই সমাধানটি সম্পর্কে সতর্কতা অবলম্বন করুন। যদি আপনি দেখুন, অ্যারেগুলি সত্যিকারের java.util.ArrayList ফিরে আসবে না। এটি একটি অভ্যন্তর শ্রেণি ফিরে আসছে যা প্রয়োজনীয় পদ্ধতিগুলি প্রয়োগ করে, তবে আপনি তালিকার মেমব্রেসগুলি পরিবর্তন করতে পারবেন না। এটি কেবল অ্যারের চারপাশে একটি মোড়ক।
মাইকেজএক্স 6 আর

1
আপনি << উপাদান> আইটেমটি একটি
অ্যারেলিস্ট

12
@ মাইকেজএক্স 6 আর: সামান্য সংশোধন : এটি একটি নির্দিষ্ট আকারের তালিকা। আপনি তালিকা (উপাদান পরিবর্তন করতে পারেন setপদ্ধতি), আপনি তালিকা (না মাপ পরিবর্তন করতে পারবেন না addবা removeউপাদানের)!
ব্যবহারকারী 85421

1
হ্যাঁ, সাবধানতার সাথে যে এটি তালিকার সাথে আপনি কী করতে চান তার উপর নির্ভর করে। এটি লক্ষণীয় যে যদি ওপি সহজেই উপাদানগুলির মাধ্যমে পুনরাবৃত্তি করতে চায় তবে অ্যারেটি কোনও রূপান্তর করতে হবে না।
পলমুরাইসিবিআর

69

আর একটি আপডেট, প্রায় 2014 শেষ হওয়া, আপনি এটি জাভা 8 দিয়েও করতে পারেন:

ArrayList<Element> arrayList = Stream.of(myArray).collect(Collectors.toCollection(ArrayList::new));

কয়েকটি অক্ষর সংরক্ষণ করা হবে, যদি এটি কেবল একটি হতে পারে List

List<Element> list = Stream.of(myArray).collect(Collectors.toList());

8
এটি সম্ভবত বাস্তবায়ন-নির্ভর না হওয়া ভাল, তবে Collectors.toList()বাস্তবে এটি একটি প্রদান করে ArrayList
বিসিএসবি 1001

Stream.of (...) এর ভুল ব্যবহার; এটি একটি একটি উপাদান স্ট্রিম তৈরি করবে। পরিবর্তে অ্যারেস স্ট্রিম ব্যবহার করুন
প্যাট্রিক পার্কার

আমি এটি মনে করি না, 2 টি বিকল্প বৈধ আছে তবে অ্যারেস স্ট্রিমটি কিছুটা 'উন্নত' কারণ আপনি 'স্টার্ট', 'শেষ' আরগস দিয়ে ওভারলোড পদ্ধতিটি ব্যবহার করে স্থির আকারের সাথে এটি তৈরি করতে পারেন। আরও দেখুন: stackoverflow.com/a/27888447/2619091
whyem

41

আপনি যদি ব্যবহার করেন:

new ArrayList<T>(Arrays.asList(myArray));

আপনি দুটি তালিকা তৈরি এবং পূরণ করতে পারেন ! দু'বার বড় তালিকা পূরণ করা হ'ল আপনি যা করতে চাইছেন না কেননা এটি প্রতিবার ক্ষমতা বাড়ানোর প্রয়োজনে আরও একটি অ্যারে তৈরি করবে ।Object[]

ভাগ্যক্রমে জেডিকে বাস্তবায়ন দ্রুত এবং Arrays.asList(a[])খুব ভালভাবে সম্পন্ন হয়েছে। এটি অ্যারে নামের একটি ধরণের অ্যারেলিস্ট তৈরি করে r অ্যারেলিস্ট যেখানে অবজেক্ট [] ডেটা সরাসরি অ্যারেতে নির্দেশ করে।

// in Arrays
@SafeVarargs
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}
//still in Arrays, creating a private unseen class
private static class ArrayList<E>

    private final E[] a;    
    ArrayList(E[] array) {
        a = array; // you point to the previous array
    }
    ....
}

বিপজ্জনক দিকটি হল আপনি যদি প্রাথমিক অ্যারে পরিবর্তন করেন তবে আপনি তালিকাটি পরিবর্তন করেন! আপনি কি তা নিশ্চিত? হয়তো হ্যাঁ, হয়তো না.

যদি তা না হয় তবে সর্বাধিক বোধগম্য উপায় হ'ল:

ArrayList<Element> list = new ArrayList<Element>(myArray.length); // you know the initial capacity
for (Element element : myArray) {
    list.add(element);
}

বা @glglgl হিসাবে বলা হয়েছে, আপনি এর সাথে অন্য একটি স্বতন্ত্র অ্যারেলিস্ট তৈরি করতে পারেন:

new ArrayList<T>(Arrays.asList(myArray));

আমি ব্যবহার করতে ভালোবাসি Collections, Arraysঅথবা পেয়ারা। তবে যদি এটি ফিট না করে বা আপনি এটি অনুভব করেন না, কেবল পরিবর্তে অন্য একটি অবৈধ লাইন লিখুন।


1
উত্তরের শেষে আপনার লুপটি এবং আপনি যে new ArrayList<T>(Arrays.asList(myArray));অংশটি ব্যবহার করতে নিরুৎসাহিত করছেন তার মধ্যে আমি মৌলিক পার্থক্যটি দেখতে ব্যর্থ হয়েছি । উভয়ই বেশ একই রকম করে এবং একই রকম জটিলতাও রয়েছে।
glglgl

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

1
new ArrayList<T>(Arrays.asList(myArray));একই কাজ করে, এটি asListএকটি ArrayList...
glglgl

37

ইন Java 9আপনি ব্যবহার করতে পারেন:

List<String> list = List.of("Hello", "World", "from", "Java");
List<Integer> list = List.of(1, 2, 3, 4, 5);

দ্রষ্টব্য যে এটি কোনও অ্যারেলিস্ট নয়, যেমন এটি স্পষ্টভাবে জিজ্ঞাসা করা হয়েছিল।
ডোরিয়ান গ্রে

33

প্রশ্ন সহ জাভা 1.7 ব্যবহার করে উত্তরটি হ'ল:

ArrayList<Element> arraylist = new ArrayList<Element>(Arrays.<Element>asList(array));

তবে এটি সর্বদা ইন্টারফেসটি ব্যবহার করা ভাল:

List<Element> arraylist = Arrays.<Element>asList(array);

30
// Guava
import com.google.common.collect.ListsLists
...
List<String> list = Lists.newArrayList(aStringArray); 

22

আপনি বিভিন্ন পদ্ধতি ব্যবহার করে রূপান্তর করতে পারেন

  1. List<Element> list = Arrays.asList(array);

  2. List<Element> list = new ArrayList();
    Collections.addAll(list, array);

  3. Arraylist list = new Arraylist();
    list.addAll(Arrays.asList(array));

আরও তথ্যের জন্য আপনি http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html দেখুন


21

সবাই যেমন বলেছিল তাই করবে

 new ArrayList<>(Arrays.asList("1","2","3","4"));

এবং অ্যারে তৈরির সাধারণতম উপায় হল পর্যবেক্ষণযোগ্য অ্যারাই

পর্যবেক্ষণযোগ্য তালিকা : একটি তালিকা যা শ্রোতাদের যখন ঘটে তখন তাদের পরিবর্তনগুলি ট্র্যাক করতে দেয়।

জাভা এসই এর জন্য আপনি চেষ্টা করতে পারেন

FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));

এটি ওরাকল ডক্স অনুসারে

পর্যবেক্ষণযোগ্য অ্যারেলিস্ট () একটি নতুন খালি পর্যবেক্ষণযোগ্য তালিকা তৈরি করে যা অ্যারেলিস্টের সাহায্যে রয়েছে। পর্যবেক্ষণযোগ্য অ্যারেলিস্ট (ই ... আইটেম) এতে যুক্ত হওয়া আইটেম সহ একটি নতুন পর্যবেক্ষণযোগ্য অ্যারে তালিকা তৈরি করে।

জাভা 9 আপডেট করুন

জাভা 9 এও এটি কিছুটা সহজ:

List<String> list = List.of("element 1", "element 2", "element 3");


18

আপনি এটি জাভা 8 এ স্ট্রিম দিয়েও করতে পারেন।

 List<Element> elements = Arrays.stream(array).collect(Collectors.toList()); 

3
এর মতো জাভা 8 , Collectors.toList()একটি ফিরে আসবে ArrayList। তবে জাভাতে ভবিষ্যতের সংস্করণগুলিতে এটির ভিন্নতা থাকতে পারে you আপনি যদি নির্দিষ্ট ধরণের সংগ্রহ চান তবে তার Collectors.toCollection()পরিবর্তে যেখানে ব্যবহার করতে পারেন সেখানে সঠিক কোন ধরণের সংগ্রহ আপনি তৈরি করতে চান তা ব্যবহার করতে পারেন।
রাজা আনবাজগান

14
  1. যদি আমরা Arrays.asList()পদ্ধতির সংজ্ঞাটি দেখতে পাই তবে আপনি এই জাতীয় কিছু পাবেন:

     public static <T> List<T> asList(T... a) //varargs are of T type. 

    সুতরাং, আপনি এটির arraylistমতো সূচনা করতে পারেন:

     List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

    দ্রষ্টব্য : প্রত্যেককে new Element(int args)স্বতন্ত্র বিষয় হিসাবে বিবেচনা করা হবে এবং এ হিসাবে পাস করা যেতে পারে var-args

  2. এই প্রশ্নের আরও একটি উত্তরও থাকতে পারে।
    আপনি যদি java.util.Collections.addAll()পদ্ধতির জন্য ঘোষণা দেখতে পান তবে আপনি এরকম কিছু পাবেন:

    public static <T> boolean addAll(Collection<? super T> c, T... a);

    সুতরাং, এই কোডটি এটি করতেও কার্যকর

    Collections.addAll(arraylist, array);

10

আর একটি সহজ উপায় হ'ল অ্যারে থেকে সমস্ত উপাদানগুলিকে প্রতিটি লুপ ব্যবহার করে একটি নতুন অ্যারেলিস্টে যুক্ত করা।

ArrayList<Element> list = new ArrayList<>();

for(Element e : array)
    list.add(e);

10

অ্যারেটি যদি কোনও প্রাথমিক ধরণের হয় তবে প্রদত্ত উত্তরগুলি কাজ করবে না। তবে জাভা 8-এর পরে আপনি ব্যবহার করতে পারেন:

int[] array = new int[5];
Arrays.stream(array).boxed().collect(Collectors.toList());

এই সমাধানটি charঅ্যারে দিয়ে কাজ করবে বলে মনে হয় না।
পিক্সেলমাস্টার

8

আপনি নীচে জাভা 8 এ এটি করতে পারেন

ArrayList<Element> list = (ArrayList<Element>)Arrays.stream(array).collect(Collectors.toList());

1
ডাউনভোটেড কারণ castালাই খুব বিপজ্জনক দেখাচ্ছে। কিছুই উল্লেখ করে না যে যে তালিকাটি ফিরিয়ে দেওয়া হয়েছে তা আসলে একটি অ্যারেলিস্ট, যেমন জাভাডোক বলেছে: "ফিরিয়ে দেওয়া তালিকার ধরণ, পরিবর্তনশীলতা, বা থ্রেড-সুরক্ষার কোনও গ্যারান্টি নেই"
ডোরিয়ান গ্রে

1
আপনি যদি স্পষ্টভাবে একটি অ্যারেলিস্ট তৈরি করতে চান তবে এটি ব্যবহার করে দেখুন:ArrayList<String> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
ডোরিয়ান গ্রে

8

আমরা সহজেই একটি অ্যারে তে রূপান্তর করতে পারি ArrayList। আমরা সংগ্রহের ইন্টারফেসের addAll()পদ্ধতিটি একটি তালিকা থেকে অন্য তালিকায় অনুলিপি করার উদ্দেশ্যে ব্যবহার করি।

 Arraylist arr = new Arraylist();
 arr.addAll(Arrays.asList(asset));

এটি গৃহীত 9 বছরের পুরানো উত্তরের চেয়ে কম দক্ষ।
আজাহানচার্লস

2
এক ArrayListগুলি কনস্ট্রাকটর একটি গ্রহণ ? extends Collection<T>, যুক্তি কলে উপার্জন addAllঅপ্রয়োজনীয়।
তমোঘনা চৌধুরী

7

যদিও এই প্রশ্নের অনেক নিখুঁতভাবে লিখিত উত্তর রয়েছে, আমি আমার ইনপুটগুলি যুক্ত করব।

বলুন তো আছে Element[] array = { new Element(1), new Element(2), new Element(3) };

নিম্নলিখিত পদ্ধতিতে নতুন অ্যারেলিস্ট তৈরি করা যেতে পারে

ArrayList<Element> arraylist_1 = new ArrayList<>(Arrays.asList(array));
ArrayList<Element> arraylist_2 = new ArrayList<>(
    Arrays.asList(new Element[] { new Element(1), new Element(2), new Element(3) }));

// Add through a collection
ArrayList<Element> arraylist_3 = new ArrayList<>();
Collections.addAll(arraylist_3, array);

এবং তারা অ্যারেলিস্টের সমস্ত অপারেশনকে খুব ভালভাবে সমর্থন করে

arraylist_1.add(new Element(4)); // or remove(): Success
arraylist_2.add(new Element(4)); // or remove(): Success
arraylist_3.add(new Element(4)); // or remove(): Success

তবে নিম্নলিখিত ক্রিয়াকলাপগুলি একটি অ্যারেলিস্টের কেবলমাত্র একটি তালিকা ভিউ দেয় এবং আসল অ্যারেলিস্ট নয় not

// Returns a List view of array and not actual ArrayList
List<Element> listView_1 = (List<Element>) Arrays.asList(array);
List<Element> listView_2 = Arrays.asList(array);
List<Element> listView_3 = Arrays.asList(new Element(1), new Element(2), new Element(3));

সুতরাং, কিছু অ্যারেলিস্ট অপারেশন করার চেষ্টা করার সময় তারা ত্রুটি দেবে

listView_1.add(new Element(4)); // Error
listView_2.add(new Element(4)); // Error
listView_3.add(new Element(4)); // Error

অ্যারে লিঙ্কের উপস্থাপনের উপরে আরও ।


7

এটি করার সহজ উপায় হল নিম্নলিখিত কোড যুক্ত করা adding চেষ্টা এবং পরীক্ষিত.

String[] Array1={"one","two","three"};
ArrayList<String> s1= new ArrayList<String>(Arrays.asList(Array1));

7

আর একটি জাভা 8 সমাধান (আমি বড় সেটগুলির মধ্যে উত্তরটি মিস করতে পারি so যদি তাই হয় তবে আমার ক্ষমা চাই)। এটি একটি অ্যারেলিস্ট তৈরি করে (তালিকার বিপরীতে) অর্থাৎ উপাদানগুলি মুছতে পারে

package package org.something.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Junk {

    static <T> ArrayList<T>  arrToArrayList(T[] arr){
        return Arrays.asList(arr)
            .stream()
            .collect(Collectors.toCollection(ArrayList::new));
    }

    public static void main(String[] args) {
        String[] sArr = new String[]{"Hello", "cruel", "world"};
        List<String> ret = arrToArrayList(sArr);
        // Verify one can remove an item and print list to verify so
        ret.remove(1);
        ret.stream()
            .forEach(System.out::println);
    }
}

আউটপুট হল ...
হ্যালো
ওয়ার্ল্ড


7

একটি উপাদান অ্যারেকে অ্যারেলিস্টে রূপান্তর করতে নিম্নলিখিত কোডটি ব্যবহার করুন।

Element[] array = {new Element(1), new Element(2), new Element(3)};

ArrayList<Element>elementArray=new ArrayList();
for(int i=0;i<array.length;i++) {
    elementArray.add(array[i]);
}

5

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

সুতরাং, আমি এখানে দুটি ব্যবহারের ক্ষেত্রে সংক্ষিপ্ত উদাহরণ দেব।

  • অপরিষ্কার সংগ্রহ সংগ্রহ :: :: আপনি যখন সংগ্রহের অবজেক্টটি তৈরির পরে পরিবর্তন করতে চান না

    List<Element> elementList = Arrays.asList(array)

  • পরিবর্তনীয় সংগ্রহের সৃষ্টি :: আপনি যখন তৈরির পরে সংগ্রহের অবজেক্টটি পরিবর্তন করতে পারেন।

    List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));


তালিকা <এলিমেন্ট> এলিমেন্টলিস্ট = অ্যারে.এএসলিস্ট (অ্যারে) মূল অ্যারের উপরে একটি মোড়ক তৈরি করে যা মূল অ্যারেটিকে তালিকা হিসাবে উপলব্ধ করে। সুতরাং একটি মোড়কের বস্তু তৈরি করা হয়, মূল অ্যারে থেকে কোনও কিছুই অনুলিপি করা হয় না। সুতরাং, উপাদানগুলি যোগ বা সরানোর মতো ক্রিয়াকলাপ অনুমোদিত নয়।
প্রিয়াঙ্কা

3
মনে রাখবেন যে আপনার "অপরিবর্তনীয় সংগ্রহ" সত্যিই অপরিবর্তনীয় নয় - Listদ্বারা ফিরে Arrays.asListআসল অ্যারের উপর শুধু একটি মোড়কের, এবং নির্দিষ্ট আইটেমগুলি অ্যাক্সেস এবং মাধ্যমে পরিবর্তন করা করার অনুমতি দেয় getএবং set। আপনার সম্ভবত স্পষ্ট করা উচিত যে আপনি "স্থাবর" এর পরিবর্তে "উপাদান যুক্ত বা অপসারণ করবেন না" এর অর্থ, একেবারে পরিবর্তন না করার অর্থ।
তমোঘনা চৌধুরী

5

প্রদত্ত বস্তুর অ্যারে:

Element[] array = {new Element(1), new Element(2), new Element(3) , new Element(2)};

অ্যারে রূপে রূপান্তর করুন:

    List<Element> list = Arrays.stream(array).collect(Collectors.toList());

অ্যারেটিকে অ্যারেলিস্টে রূপান্তর করুন

    ArrayList<Element> arrayList = Arrays.stream(array)
                                       .collect(Collectors.toCollection(ArrayList::new));

অ্যারেটিকে লিঙ্কডলিস্টে রূপান্তর করুন

    LinkedList<Element> linkedList = Arrays.stream(array)
                     .collect(Collectors.toCollection(LinkedList::new));

মুদ্রণ তালিকা:

    list.forEach(element -> {
        System.out.println(element.i);
    });

আউটপুট

1

2

3


4

জাভা 8 এর অ্যারে শ্রেণি একটি স্ট্রিম () পদ্ধতি সরবরাহ করে যা আদিমস্ত অ্যারে এবং অবজেক্ট অ্যারে উভয়কেই গ্রহণ করে ওভারলোড হওয়া সংস্করণ রয়েছে।

/**** Converting a Primitive 'int' Array to List ****/

int intArray[] = {1, 2, 3, 4, 5};

List<Integer> integerList1 = Arrays.stream(intArray).boxed().collect(Collectors.toList());

/**** 'IntStream.of' or 'Arrays.stream' Gives The Same Output ****/

List<Integer> integerList2 = IntStream.of(intArray).boxed().collect(Collectors.toList());

/**** Converting an 'Integer' Array to List ****/

Integer integerArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

List<Integer> integerList3 = Arrays.stream(integerArray).collect(Collectors.toList());

3

নীচে কোডটি এটি করার দুর্দান্ত উপায় বলে মনে হচ্ছে।

new ArrayList<T>(Arrays.asList(myArray));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.