Normalerweise ArrayList.toArray()
würde also eine Art von Object[]
... zurückgegeben, aber angenommen, es ist ein
Arraylist
Objekt Custom
. Wie kann ich toArray()
eine Art von zurückgeben Custom[]
anstatt Object[]
?
Normalerweise ArrayList.toArray()
würde also eine Art von Object[]
... zurückgegeben, aber angenommen, es ist ein
Arraylist
Objekt Custom
. Wie kann ich toArray()
eine Art von zurückgeben Custom[]
anstatt Object[]
?
Antworten:
So was:
List<String> list = new ArrayList<String>();
String[] a = list.toArray(new String[0]);
Vor Java6 wurde empfohlen zu schreiben:
String[] a = list.toArray(new String[list.size()]);
da die interne Implementierung ohnehin ein Array mit der richtigen Größe neu zuweisen würde, sollten Sie dies besser im Voraus tun. Da Java6 das leere Array bevorzugt wird, siehe .toArray (neue MyClass [0]) oder .toArray (neue MyClass [myList.size ()])?
Wenn Ihre Liste nicht richtig eingegeben wurde, müssen Sie eine Besetzung durchführen, bevor Sie toArray aufrufen. So was:
List l = new ArrayList<String>();
String[] a = ((List<String>)l).toArray(new String[l.size()]);
Es muss nicht wirklich zurückkehren Object[]
, zum Beispiel: -
List<Custom> list = new ArrayList<Custom>();
list.add(new Custom(1));
list.add(new Custom(2));
Custom[] customs = new Custom[list.size()];
list.toArray(customs);
for (Custom custom : customs) {
System.out.println(custom);
}
Hier ist meine Custom
Klasse: -
public class Custom {
private int i;
public Custom(int i) {
this.i = i;
}
@Override
public String toString() {
return String.valueOf(i);
}
}
arrayList.toArray(new Custom[0]);
Ich habe die Antwort bekommen ... das scheint perfekt zu funktionieren
public int[] test ( int[]b )
{
ArrayList<Integer> l = new ArrayList<Integer>();
Object[] returnArrayObject = l.toArray();
int returnArray[] = new int[returnArrayObject.length];
for (int i = 0; i < returnArrayObject.length; i++){
returnArray[i] = (Integer) returnArrayObject[i];
}
return returnArray;
}
@SuppressWarnings("unchecked")
public static <E> E[] arrayListToArray(ArrayList<E> list)
{
int s;
if(list == null || (s = list.size())<1)
return null;
E[] temp;
E typeHelper = list.get(0);
try
{
Object o = Array.newInstance(typeHelper.getClass(), s);
temp = (E[]) o;
for (int i = 0; i < list.size(); i++)
Array.set(temp, i, list.get(i));
}
catch (Exception e)
{return null;}
return temp;
}
Proben:
String[] s = arrayListToArray(stringList);
Long[] l = arrayListToArray(longList);