Diziden ArrayList oluşturun


3596

Ben gibi başlatılan bir dizi var:

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

Bu diziyi ArrayListsınıfın bir nesnesine dönüştürmek istiyorum .

ArrayList<Element> arraylist = ???;

49
Java9 -> List <String> list = List.of (“Merhaba”, “Dünya”, “Gönderen”, “Java”);
MarekM

18
@MarekM Bu cevap yanlış çünkü bu bir ArrayList. Poster özellikle bunu istedi.
Dorian Gray

4
List arayüzünü kullanarak benim olmadığını düşünüyorum, çünkü en iyi uygulama bu. Ancak burada isterseniz - yeni ArrayList <> (List.of (“Merhaba”, “Dünya”, “from”, “Java”));
MarekM

10
Mesele arayüzü kullanmakla ilgili değildir, mesele çözümünüzde geri döndürülen listenin değiştirilemez olmasıdır. Bu daha çok bir sorun olabilir ve bir ArrayList istediği bir neden olabilir
Dorian Gray

Yanıtlar:


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

361
Evet. Ve sadece bir liste istediğiniz (en yaygın) durumda, new ArrayListçağrı da gereksizdir.
Calum

143
@Luron - sadece kullanınList<ClassName> list = Arrays.asList(array)
Havuz

248
@Calum ve @Pool - Alex Miller'ın cevabında aşağıda belirtildiği gibi, Arrays.asList(array)yeni bir ArrayListnesneye geçmeden kullanmak listenin boyutunu düzeltir. A'yı kullanmanın daha yaygın nedenlerinden biri ArrayList, boyutunu dinamik olarak değiştirebilmektir ve öneriniz bunu önleyecektir.
Kod Jokey

130
Arrays.asList () korkunç bir işlevdir ve dönüş değerini asla olduğu gibi kullanmamalısınız. Liste şablonunu kırar, bu nedenle gereksiz görünse bile her zaman burada belirtilen biçimde kullanın. İyi cevap.
Adam

83
@Adam Lütfen java.util.List için javadoc'u inceleyin. Ekleme sözleşmesi, bir UnsupportedOperationException oluşturmalarına izin verir. docs.oracle.com/javase/7/docs/api/java/util/... birçok kez Bir koleksiyonu kullanmak için somut uygulama bilmek zorunda olduğunu çok güzel olmayan bir nesne yönelimli bir perspektiften Kuşkusuz, - bu çerçeveyi basit tutmak için pragmatik bir tasarım tercihiydi.
lbalazscs

918

Verilen:

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

En basit cevap:

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

Bu iyi çalışır. Ancak bazı uyarılar:

  1. AsList'ten döndürülen listenin boyutu sabittir . Bu nedenle, kodunuzdaki döndürülen listeye öğe eklemek veya listeden öğe kaldırmak istiyorsanız, yeni bir listeye sarmanız gerekir ArrayList. Aksi takdirde UnsupportedOperationException.
  2. Döndürülen liste asList()orijinal dizi tarafından desteklenir. Orijinal diziyi değiştirirseniz, liste de değiştirilir. Bu şaşırtıcı olabilir.

6
Her iki işlemin zaman karmaşıklığı nedir? Açık arraylist yapı ile veya kullanmadan demek istiyorum.
lanetlendi

35
Arrays.asList () yalnızca varolan diziyi O (1) olacak şekilde sararak bir ArrayList oluşturur.
Alex Miller

27
Yeni bir ArrayList () öğesine kaydırma işlemi, sabit boyut listesindeki tüm öğelerin yinelenmesine ve O (n) gibi yeni ArrayList öğesine eklenmesine neden olur.
Alex Miller

8
asList () tarafından döndürülen Listenin uygulanması, UnsupportedOperationException özelliğini açıklayan List'in (add (), remove (), clear () vb.) yöntemlerinden birkaçını uygulamaz. kesinlikle bir uyarı ...
sethro

8
Soru "ArrayList sınıfının bir nesnesi" için sorulduğunda, atıfta bulunulan sınıfı varsaymanın makul olduğunu düşünüyorum java.util.ArrayList. Arrays.asList aslında java.util.Arrays.ArrayListbir instanceofdiğer sınıf olmayan bir döndürür . Üçüncü bir uyarı, yukarıdaki gerektiren bir bağlamda kullanmaya çalışırsanız işe yaramayacağıdır.
Dave L.

352

(eski iş parçacığı, ama hiçbiri Guava veya diğer kütüphanelerden ve diğer bazı ayrıntılardan bahsetmediği gibi sadece 2 sent)

Yapabiliyorsanız, Guava Kullanın

Bu maskaralıkları büyük ölçüde basitleştiren Guava yolunu belirtmeye değer:

kullanım

Değişmez Bir Liste İçin

Kullanım ImmutableListsınıfını ve onun of()ve copyOf()fabrika yöntemleri (elementler null olamaz) :

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

Değişken Listesi İçin

ListsSınıfı ve newArrayList()fabrika yöntemlerini kullanın :

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

Lütfen diğer sınıflardaki diğer veri yapıları için de benzer yöntemleri not edin, örneğin Sets.

Neden Guava?

Ana cazibe, Guava fabrika yöntemlerinin kullanımı türlerin çoğu zaman çıkarılmasına izin verdiği için, tip güvenliği için jeneriklerden kaynaklanan dağınıklığı azaltmak olabilir . Ancak, Java 7 yeni elmas operatörüne geldiğinden bu argüman daha az su tutar.

Ancak tek neden bu değil (ve Java 7 henüz her yerde değil): steno sözdizimi de çok kullanışlıdır ve yukarıda görüldüğü gibi yöntem başlatıcıları daha anlamlı kod yazmanıza izin verir. Geçerli Java Koleksiyonları ile 2 alan bir Guava çağrısı yaparsınız.


Yapamazsan ...

Değişmez Bir Liste İçin

JDK'nın Arrayssınıfını ve aşağıdakilerle asList()sarılmış fabrika yöntemini kullanın Collections.unmodifiableList():

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

İçin döndürülen tip unutmayın asList()bir olan Listbir beton kullanarak ArrayListuygulama ama o değil java.util.ArrayList . Bu, öykünen öykünen ArrayListancak aslında doğrudan geçirilen diziye başvuruda bulunan ve "yazarak" yapan değişikliklerdir (değişiklikler diziye yansıtılır).

ListAPI'nın bazı yöntemlerinde yalnızca bir genişletme yoluyla değişiklik yapılmasını yasaklar AbstractList(böylece, öğe ekleme veya kaldırma desteklenmez), ancak set()öğelerin geçersiz kılınmasına yönelik çağrılara izin verir . Bu yüzden bu liste tam olarak değişmez değildir ve bir çağrı asList()ile sarılmalıdır Collections.unmodifiableList().

Değiştirilebilir bir listeye ihtiyacınız varsa bir sonraki adıma bakın.

Değişken Listesi İçin

Yukarıdaki ile aynı, ancak gerçek bir ile sarılmış 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+

Eğitim Amaçlı: Manuel Olmanın İyi Yolu

// 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 Ancak, Listdöndürülen öğenin Arrays.asListyine de setöğeleri oluşturabildiğiniz için değiştirilebilir olduğunu unutmayın - yalnızca yeniden boyutlandırılamaz. Guava'sız değişmez listeler için bahsedebilirsiniz Collections.unmodifiableList.
Paul Bellora

1
@haylem Eğitim Amaçlı Bölümler için: İyi Ol 'Manuel Yol , arrayToListJava 1.5+ için yanlış. StringGenel parametre türünü kullanmak yerine, listelerini başlatır ve belirli bir diziden dizeleri almaya çalışırsınız T. Bunun dışında, iyi yanıt ve manuel yol dahil tek kişi olduğu için +1.
afsantos

"Kaydırılamaz bir liste için", değiştirilemeyen bir liste için "bölümünü, kaydırılan dizide daha sonra yapılacak değişikliklerle değiştirilebileceği için bölümünüzü yeniden adlandırın. Yine de O(1), ama değişmezlik için, örneğin bir kopyasını oluşturmanız gerekir Collections.unmodifiableList(new ArrayList<>(Arrays.asList(array))).
maaartinus

232

Bu soru oldukça eski olduğundan, kimsenin henüz en basit formu önermediği beni şaşırtıyor:

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

Java 5'ten itibaren Arrays.asList()bir varargs parametresi alır ve diziyi açıkça yapılandırmanız gerekmez.


7
Özellikle,List<String> a = Arrays.asList("first","second","third")
18446744073709551615

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

Bunun myArraytürüyle aynı olduğundan emin olun T. Örneğin List<Integer>bir diziden bir oluşturmaya çalışırsanız derleyici hatası alırsınız int.


103

Başka bir yol (esasen new ArrayList(Arrays.asList(array))performans açısından çözümle eşdeğer olmasına rağmen :

Collections.addAll(arraylist, array);

96

Java 9

In Java 9 kullanabileceğiniz List.ofbir yaratmak için statik fabrika yöntemi Listdeğişmezi. Aşağıdaki gibi bir şey:

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

Bu, üç öğe içeren değişmez bir liste döndürür . Değiştirilebilir bir liste istiyorsanız , bu listeyi yapıcıya iletinArrayList :

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

JEP 269: Koleksiyonlar için Kullanışlı Fabrika Yöntemleri

JEP 269 , Java Koleksiyonlar API'sı için bazı kullanışlı fabrika yöntemleri sağlar . Bunlar değişmez statik fabrika yöntemleri yerleşik olarak List, Setve Mapdaha sonra Java 9 ve arayüzler.


List.of (), orijinal soruda istendiği gibi bir java.util.ArrayList örneğini döndürmez. Bu nedenle sadece ikinci seçenek geçerli bir cevaptır.
tquadrat

84

Muhtemelen bir Listeye ihtiyacınız vardır, ArrayList'e değil. Bu durumda şunları yapabilirsiniz:

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

8
Bu, orijinal giriş dizisi tarafından desteklenecektir, bu yüzden (muhtemelen) yeni bir ArrayList'e sarmak istersiniz.
Kertenkele Bill

16
Bu çözüme dikkat edin. Eğer bakarsanız, Arrays gerçek bir java.util.ArrayList döndürmez. Gerekli yöntemleri uygulayan bir iç sınıf döndürüyor, ancak listedeki üyeleri değiştiremezsiniz. Sadece bir dizinin etrafını saran bir paket.
Mikezx6r

1
Liste <Element> öğesini bir ArrayList <Element>
öğesine yayınlayabilirsiniz

12
@ Mikezx6r: küçük düzeltme : sabit boyutlu bir liste. Listenin öğelerini ( setyöntem) değiştirebilir, listenin boyutunu değiştiremezsiniz (değil addveya removeöğeler)!
user85421

1
Evet, bu uyarının listeyle ne yapmak istediğinize bağlı olduğu konusunda. OP sadece öğeler arasında yineleme yapmak istiyorsa, dizinin hiç dönüştürülmesi gerekmediğini belirtmek gerekir.
PaulMurrayCbr

69

2014 yılını neredeyse biten başka bir güncelleme, Java 8 ile de yapabilirsiniz:

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

Birkaç karakter kaydedilebilir, eğer bu sadece List

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

8
Muhtemelen uygulamaya bağlı olmamak en iyisidir, ancak Collectors.toList()aslında bir döndürür ArrayList.
bcsb1001

Stream.of (...) 'nin yanlış kullanımı; tek öğeli bir akış oluşturur. Bunun yerine Arrays.stream kullanın
Patrick Parker

Sanmıyorum, 2 seçenek geçerli ama Arrays.stream biraz 'daha iyi' çünkü 'start', 'end' args ile aşırı yükleme yöntemini kullanarak sabit boyutta oluşturabilirsiniz. Ayrıca bakınız: stackoverflow.com/a/27888447/2619091
whyem

41

Eğer kullanırsan :

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

Eğer açabilir oluşturmak ve dolgu iki listeleri! Büyük bir listeyi iki kez doldurmak, yapmak istemediğiniz şeydir, çünkü Object[]kapasitenin her genişletilmesi gerektiğinde başka bir dizi oluşturacaktır .

Neyse ki JDK uygulaması hızlı ve Arrays.asList(a[])çok iyi. Object [] verilerinin doğrudan diziyi işaret ettiği Arrays.ArrayList adlı bir tür ArrayList oluşturur.

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

Tehlikeli tarafı, ilk diziyi değiştirirseniz List!Bunu istediğinden emin misin? Belki evet belki hayır.

Değilse, en anlaşılır yol bunu yapmaktır:

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

Ya da @glglgl dediğimiz gibi, bağımsız bir ArrayList oluşturabilirsiniz:

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

Ben kullanmayı seven Collections, Arraysya Guava. Ama uymuyorsa veya hissetmiyorsanız, bunun yerine başka bir yetersiz satır yazın.


1
Cevabın sonundaki döngü new ArrayList<T>(Arrays.asList(myArray));ile kullanmaktan vazgeçtiğiniz kısım arasındaki temel farkı göremiyorum . Her ikisi de aynı şeyi yapıyor ve aynı karmaşıklığa sahip.
glglgl

Koleksiyonlar dizinin başında bir işaretçi oluşturur. Döngüm birçok işaretçi oluşturur: her dizi üyesi için bir tane. Orijinal dizi değişirse, işaretçilerim hala eski değerlere yönlendirilir.
Nicolas Zozol

1
new ArrayList<T>(Arrays.asList(myArray));Aynı, kopyalar gelmez asListbir etmek ArrayList...
glglgl

37

Şunlarda Java 9kullanabilirsiniz:

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

Açıkça sorulduğu gibi bunun bir ArrayList olmadığını unutmayın.
Dorian Gray

33

Soruya göre java 1.7 kullanarak cevap:

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

Ancak her zaman arayüzü kullanmak daha iyidir:

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

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


21

herkesin söylediği gibi bu

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

ve dizi oluşturmanın en yaygın yolu gözlenebilirdir.

ObservableList: Dinleyicilerin değişiklikleri gerçekleştiğinde izlemelerine izin veren bir liste.

Java SE için deneyebilirsiniz

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

Oracle Docs'a göre

obsableArrayList () Bir arraylist tarafından desteklenen yeni, boş, gözlenebilir bir liste oluşturur. obsableArrayList (E ... öğeleri) Öğeye eklenen yeni bir gözlemlenebilir dizi listesi oluşturur.

Java 9'u Güncelle

Java 9'da da biraz kolay:

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

20

Java 8'den bu yana dönüştürmenin daha kolay bir yolu var:

public static <T> List<T> fromArray(T[] array) {
    return Arrays.stream(array).collect(toList());
}

18

Ayrıca Java 8'de akışla da yapabilirsiniz.

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

3
İtibariyle java 8 , Collectors.toList()bir dönecektir ArrayList. Ancak bu, java'nın gelecekteki sürümlerinde farklı olabilir.Özel bir koleksiyon türü Collectors.toCollection()istiyorsanız, tam olarak hangi koleksiyon türünü oluşturmak istediğinizi belirtebilirsiniz.
Raja Anbazhagan

14
  1. Arrays.asList()Yöntemin tanımını görürsek şöyle bir şey elde edersiniz:

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

    Yani, şu şekilde başlatabilirsiniz arraylist:

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

    Not : her biri new Element(int args)Bireysel Nesne olarak değerlendirilir ve bir olarak geçirilebilir var-args.

  2. Bu soru için başka bir cevap daha olabilir. Yöntem
    için bir bildirim görürseniz java.util.Collections.addAll()şöyle bir şey elde edersiniz:

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

    Bu nedenle, bu kod da yararlıdır

    Collections.addAll(arraylist, array);

10

Diğer bir basit yol, for-each döngüsünü kullanarak dizideki tüm öğeleri yeni bir ArrayList'e eklemektir.

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

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

10

Dizi ilkel türdeyse verilen yanıtlar çalışmaz. Ancak Java 8'den beri şunları kullanabilirsiniz:

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

bu çözüm de chardizi ile çalışmıyor gibi görünüyor .
PixelMaster

8

Java 8'de aşağıdaki gibi yapabilirsiniz

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

1
İndirildi çünkü bu oyuncu çok tehlikeli görünüyor. hiçbir şey, javadoc'un belirttiği gibi, döndürülen liste türünün aslında bir ArrayList olduğunu belirtmez: "Döndürülen Listenin türü, değiştirilebilirliği, serileştirilebilirliği veya iş parçacığı güvenliği konusunda hiçbir garanti yoktur"
Dorian Gray

1
Açıkça bir ArrayList oluşturmak istiyorsanız şunu deneyin:ArrayList<String> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
Dorian Gray

8

Bir diziyi kolayca dönüştürebiliriz ArrayList. addAll()İçeriği bir listeden diğerine kopyalamak için Koleksiyon arayüzünün yöntemini kullanıyoruz .

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

Bu, kabul edilen 9 yaşındaki cevaptan daha az etkilidir.
AjahnCharles

2
Yapıcılardan biri, gereksiz bir çağrıyı yapan ArrayListbir ? extends Collection<T>argümanı kabul eder addAll.
Tamoghna Chowdhury

7

Bu soruya mükemmel şekilde yazılmış çok sayıda cevap olmasına rağmen, girdilerimi ekleyeceğim.

Söyle var Element[] array = { new Element(1), new Element(2), new Element(3) };

Yeni ArrayList aşağıdaki şekillerde oluşturulabilir

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

Ve ArrayList'in tüm operasyonlarını çok iyi destekliyorlar

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

Ancak aşağıdaki işlemler, gerçek ArrayList'in değil, yalnızca bir ArrayList öğesinin Liste görünümünü döndürür.

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

Bu nedenle, bazı ArrayList işlemleri yapmaya çalışırken hata verecektir

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

Dizi bağlantısının liste gösterimi hakkında daha fazla bilgi .


7

Bunu yapmanın en basit yolu aşağıdaki kodu eklemektir. Denendi ve test edildi.

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

7

Başka bir Java8 çözümü (Büyük set arasında cevabı kaçırmış olabilirim. Öyleyse özür dilerim). Bu, bir ArrayList oluşturur (bir Listenin aksine), yani öğeleri silebilir

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

Çıktı ...
Merhaba
dünya


7

Bir öğe dizisini ArrayList'e dönüştürmek için aşağıdaki kodu kullanın.

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

Zaten herkes sorununuz için yeterince iyi cevap verdi. Şimdi tüm önerilerden, hangisinin gereksiniminize uyacağına karar vermeniz gerekiyor. Bilmeniz gereken iki tür koleksiyon vardır. Biri değiştirilmemiş koleksiyon ve diğeri ise nesneyi daha sonra değiştirmenize izin verecektir.

Burada iki kullanım örneği için kısa bir örnek vereceğim.

  • Değişmez koleksiyon oluşturma :: Oluşturma işleminden sonra koleksiyon nesnesini değiştirmek istemediğinizde

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

  • Değişken koleksiyon oluşturma :: Oluşturulduktan sonra oluşturulan koleksiyon nesnesini değiştirmek istediğinizde.

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


List <Element> elementList = Arrays.asList (dizi) orijinal dizi üzerinde orijinal diziyi Liste olarak kullanılabilir yapan bir sarıcı oluşturur. Böylece bir sarıcı nesnesi oluşturulur, orijinal diziden hiçbir şey kopyalanmaz. Bu nedenle, öğe ekleme veya kaldırma gibi işlemlere izin verilmez.
Priyanka

3
Senin "değişmez koleksiyonu" gerçekten değişmez olmadığını Not - Listtarafından döndürülen Arrays.asListorijinal dizisi üzerinde sadece bir sarıcı ve bireysel öğeler erişilebilir ve üzeri değişimine izin verir getve set. Muhtemelen "değişmez" yerine "eleman eklemeyin veya kaldırmayın" demek istediğinizi açıklığa kavuşturmalısınız, bu da hiç değişmeyecek demektir.
Tamoghna Chowdhury

5

Verilen Nesne Dizisi:

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

Diziyi Listeye Dönüştür:

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

Diziyi ArrayList'e Dönüştür

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

Diziyi LinkedList'e Dönüştür

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

Listeyi Yazdır:

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

ÇIKTI

1

2

3


4

Java 8'in Arrays sınıfı, hem ilkel dizileri hem de Nesne dizilerini kabul eden aşırı yüklenmiş sürümlere sahip bir stream () yöntemi sağlar.

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

Aşağıdaki kod bunu yapmak için güzel bir yol gibi görünüyor.

new ArrayList<T>(Arrays.asList(myArray));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.