Mai mult
Crea ArrayList din matrice
Am o matrice care este inițializat, cum ar fi:
Element[] array = {new Element(1), new Element(2), new Element(3)};
Aș dori pentru a converti această matrice într-un obiect din clasa ArrayList.
ArrayList<Element> arraylist = ???;
3423
34
Având în vedere:
Răspunsul cel mai simplu este sa faci:
Aceasta va funcționa bine. Dar unele limitări:
ArrayList
. Altfel'll oUnsupportedOperationException
.asList()
este susținută de matrice inițială. Dacă modificați matrice inițială, lista va fi modificat la fel de bine. Acest lucru poate fi surprinzător.(thread vechi, dar doar 2 cenți ca nici unul nu mai vorbim de Guava sau alte libs și alte detalii)
Dacă Aveți Posibilitatea, Folosiți Guava
L's valoare de subliniind Guava fel, care simplifică foarte mult aceste comice:
Utilizare
Pentru o Lista Imuabil
Folosi
ImmutableList
clasă șia()
șicopyOf()
fabrica de metode (elemente pot't fi null):Pentru O Mutabil Lista
Folosi
Liste
clasă șinewArrayList()
fabrica de metode:Vă rugăm să rețineți, de asemenea, metode similare pentru alte structuri de date în alte clase, de exemplu în
Seturi
.De Ce Guava?
Principalul punct de atractie ar putea fi pentru a reduce dezordinea din cauza generice de tip siguranță, ca utilizarea de Guava fabrica de metode permite ca tipurile să fie dedusă cele mai multe ori. Cu toate acestea, acest argument deține mai puțin de apă din Java 7 a sosit cu noul diamant operator.
Dar's nu este singurul motiv (și Java 7 e't peste tot încă): scurtătura sintaxa este, de asemenea, foarte la îndemână, și metode de initializare, cum am văzut mai sus, permite să se scrie mai mult cod expresiv. Ai face într-o singură Guava apel ce durează 2 cu actualele Colecții Java.
Dacă Ai Poate't...
Pentru o Lista Imuabil
Utilizarea JDK's
Tablouri
clasă șiasList()
metoda fabrica, înfășurat cu unColecții.unmodifiableList()
:Rețineți că s-a întors tipul de asList()
e o "Listă" cu ajutorul unui beton
ArrayList în aplicare, dar NUjava.util.ArrayList
. L's un interior de tip, care emulează un ArrayList` dar de fapt direct referințe la trecut matrice și o face "scrie" (modificările sunt reflectate în matrice).Se interzice modificări prin unele din "Lista" API's metode prin simpla extindere o
AbstractList
(deci, adăugarea sau eliminarea de elemente este de neacceptat), cu toate acestea, se permite apeluri săset()
pentru a înlocui elementele. Astfel, această listă nu este't cu adevărat imuabil și un apel laasList()
ar trebui să fie înfășurat cu Colectiile.unmodifiableList()`.Vezi următorul pas dacă aveți nevoie de un mutabil lista.
Pentru o Mutabil Lista
La fel ca mai sus, dar înfășurat cu o real
java.util.ArrayList
:Pentru Scopuri Educaționale: Bun ol' Mod Manual
Deoarece această întrebare este destul de vechi, mă surprinde că nimeni nu a sugerat cea mai simplă formă încă:
Ca de Java 5,
Matrice.asList()
ia o varargs parametru și nu't au de a construi matrice în mod explicit.Asigurați-vă că
myArray
este de același tip ca și "T". Te'll obține un compiler eroare dacă încercați să creați o Listădintr-o serie de
int`, de exemplu.Un alt mod (deși, în esență echivalent cu
new ArrayList(Tablouri.asList(array))
soluție performance-wise:Java 9
În Java 9, puteți utiliza
Lista.a
metoda statica fabrică în scopul de a crea o "Listă" de literal. Ceva de genul următor:Acest lucru ar reveni un imuabil listă care conține trei elemente. Dacă doriți un mutabil lista, trece această listă
ArrayList
constructor:JEP 269: Confort Fabrica de Metode pentru Colecții
JEP 269 oferă un confort fabrica de metode pentru Colecții Java API. Aceste imuabil metode fabrică statice sunt construite în
Lista
,Stabilit
, șiHarta
interfețe în Java 9 și mai târziu.Probabil ai nevoie doar de o Lista, nu un ArrayList. În acest caz puteți face:
Un alt update, aproape de finalul anului 2014, o poti face cu Java 8:
Câteva personaje-ar fi salvat, dacă acest lucru ar putea fi doar o "Listă"
Dacă utilizați :
ai poate crea și umple două liste ! Umplere de două ori o listă mare este exact ceea ce ai nu't vreau să fac pentru că se va crea un alt Obiect[]` matrice de fiecare dată de capacitatea trebuie să fie extinsă.
Din fericire JDK aplicare este rapid și Tablouri.asList(a[])` este foarte bine făcut. Se crea un fel de ArrayList numit Matrice.ArrayList unde Object[] puncte de date direct de la matrice.
Partea periculoasă e care dacă schimbați inițială matrice, puteți modifica Lista ! Ești sigur că vrei asta ? Poate da, poate nu.
Dacă nu, cel mai ușor de înțeles este de a face acest lucru :
Sau cum a spus @glglgl, puteți crea un alt independent ArrayList cu :
Îmi place să folosesc "Colecții",
Matrice
, sau Guava. Dar dacă don't se potrivesc, sau tu nu't simt, doar scrie un alt neelegant linie în loc.În Java 9` poti folosi:
În conformitate cu întrebarea răspunsul folosind java 1.7 este:
Cu toate acestea, de's întotdeauna mai bine de a folosi interfata:
Puteți converti folosind diferite metode
Lista list = Matrice.asList(matrice);`
Lista list = new ArrayList(); Colecții.addAll(lista, matrice);`
Arraylist list = new Arraylist(); lista.addAll(Tablouri.asList(array));
Pentru mai multe detalii puteți consulta http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html
ca tot spus acest lucru o va face
și comune mai nou mod de a crea matrice este observableArrays
ObservableList: O listă care vă permite ascultătorilor să urmăriți modificările atunci când acestea apar.
pentru Java SE, puteți încerca
care este potrivit Oracle Docs
Update Java 9
de asemenea, în Java 9 l's un pic mai ușor:
Deoarece Java 8 există o cale mai ușoară de a transforma:
De asemenea, puteți face cu flux în Java 8.
public static Listă asList(T o) //varargs sunt de tip T.
Deci, s-ar putea inițializa
arraylist
astfel:Listă arraylist = Matrice.asList(nou Element(1),Element nou(2),nou Element(3));
public static boolean addAll(Collection<? super T> c, T... a); Deci, acest cod este, de asemenea, util să se facă astfel încât
Colecții.addAll(arraylist, matrice);
Un alt mod simplu este de a adăuga toate elementele din matrice la un nou ArrayList folosind-o pentru fiecare buclă.
Dacă o matrice este de un tip primitiv, dat răspunsuri câștigat't de lucru. Dar din moment Java 8, puteți folosi: