ArrayList til Array-konvertering i Java: toArray()-metoder
Følgende metoder kan bruges til at konvertere ArrayList til Array:
Metode 1: Brug af Object[] toArray() metoden
Syntaks:
public Object[] toArray()
- Det er specificeret af toArray i interface Collection og interface List
- Det tilsidesætter toArray i klassen AbstractCollection
- Det returnerer et array, der indeholder alle elementerne på denne liste i den rigtige rækkefølge.
Java
// Java program to demonstrate working of> // Objectp[] toArray()> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Object[] objects = al.toArray();> > // Printing array of objects> > for> (Object obj : objects)> > System.out.print(obj +> ' '> );> > }> }> |
Produktion
10 20 30 40
Bemærk: toArray()-metoden returnerer en matrix af typen Object(Object[]). Vi skal typecaste det til Integer, før vi bruger det som Integer-objekter. Hvis vi ikke typecaster, får vi kompileringsfejl.
Overvej følgende eksempel:
Java
// A Java program to demonstrate that assigning Objects[]> // to Integer[] causes error.> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > // Error: incompatible types: Object[]> > // cannot be converted to Integer[]> > Integer[] objects = al.toArray();> > for> (Integer obj : objects)> > System.out.println(obj);> > }> }> |
Produktion:
19: error: incompatible types: Object[] cannot be converted to Integer[] Integer[] objects = al.toArray(); ^ 1 error
Det anbefales derfor at oprette et array, som elementer af List skal lagres i, og sende det som et argument i toArray()-metoden for at gemme elementer, hvis det er stort nok. Ellers tildeles et nyt array af samme type til dette formål.
Metode 2: Brug af T[] tilArray(T[] a)
// Converts a list into an array arr[] and returns same. // If arr[] is not big enough, then a new array of same // type is allocated for this purpose. // T represents generic . public T[] toArray(T[] arr)
Bemærk, at der er en array-parameter og array-returværdi. Hovedformålet med bestået array er at fortælle typen af array. Det returnerede array er af samme type som bestået array.
- Hvis det beståede array har nok plads, lagres elementer i selve dette array.
- Hvis det beståede array ikke har nok plads, oprettes et nyt array med samme type og størrelse som en given liste.
- Hvis det beståede array har mere plads, fyldes arrayet først med listeelementer, derefter udfyldes null-værdier.
Det kaster ArrayStoreException, hvis runtime-typen af a ikke er en supertype af runtime-typen for hvert element på denne liste.
Java
// A Java program to convert an ArrayList to arr[]> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Integer[] arr => new> Integer[al.size()];> > arr = al.toArray(arr);> > for> (Integer x : arr)> > System.out.print(x +> ' '> );> > }> }> |
Produktion
10 20 30 40
Bemærk: Hvis det angivne array er null, vil det kaste NullpointerException. Se dette f.eks.
Metode 3: Manuel metode til at konvertere ArrayList ved hjælp af get()-metoden
Vi kan bruge denne metode, hvis vi ikke ønsker at bruge java i den indbyggede toArray() metode. Dette er en manuel metode til at kopiere alle ArrayList-elementerne til String Array[].
// Returns the element at the specified index in the list. public E get(int index)
Java
// Java program to convert a ArrayList to an array> // using get() in a loop.> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > Integer[] arr => new> Integer[al.size()];> > // ArrayList to Array Conversion> > for> (> int> i => 0> ; i arr[i] = al.get(i); for (Integer x : arr) System.out.print(x + ' '); } }> |
Produktion
10 20 30 40
Metode 4: Brug streams API af samlinger i java 8 til at konvertere til matrix af primitiv int-type
Vi kan bruge denne streams()-metode til list og mapToInt() til at konvertere ArrayList til array af primitiv datatype int
int[] arr = list.stream().mapToInt(i ->i).toArray();
Java
// Java program to convert a ArrayList to an array> // using streams()> import> java.io.*;> import> java.util.List;> import> java.util.ArrayList;> class> GFG {> > public> static> void> main(String[] args)> > {> > List al => new> ArrayList();> > al.add(> 10> );> > al.add(> 20> );> > al.add(> 30> );> > al.add(> 40> );> > // ArrayList to Array Conversion> > int> [] arr = al.stream().mapToInt(i ->i).toArray();> > for> (> int> x : arr)> > System.out.print(x +> ' '> );> > }> }> |
Produktion
10 20 30 40