所以,通常
ArrayList.toArray()
会返回 Object[]
的类型....但假设它是一个
对象 Arraylist
的 Custom
,如何使 toArray()
返回 Custom[]
类型而不是 Object[]
?
像这样:
List<String> list = new ArrayList<String>();
String[] a = list.toArray(new String[0]);
Java6之前建议这样写:
String[] a = list.toArray(new String[list.size()]);
因为内部实现无论如何都会重新分配一个适当大小的数组,所以你最好提前完成它。由于 Java6 首选空数组,请参阅 .toArray(new MyClass[0]) 或 .toArray(new MyClass[myList.size()])?
如果您的列表类型不正确,您需要在调用 toArray 之前进行强制转换。像这样:
List l = new ArrayList<String>();
String[] a = ((List<String>)l).toArray(new String[l.size()]);
将 List 转换为特定类型(例如 Long)的数组的较短版本:
Long[] myArray = myList.toArray(Long[]::new);
(从 java 11 开始可用)
其实并不需要返回
Object[]
,例如:-
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);
}
这是我的
Custom
课程:-
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]);
public static <E> E[] arrayListToTypedArray(List<E> list) {
if (list == null) {
return null;
}
int noItems = list.size();
if (noItems == 0) {
return null;
}
E[] listAsTypedArray;
E typeHelper = list.get(0);
try {
Object o = Array.newInstance(typeHelper.getClass(), noItems);
listAsTypedArray = (E[]) o;
for (int i = 0; i < noItems; i++) {
Array.set(listAsTypedArray, i, list.get(i));
}
} catch (Exception e) {
return null;
}
return listAsTypedArray;
}
我得到了答案...这似乎工作得很好
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;
}
我也在寻找这个问题的答案。以下解决方案适用于我的情况。
import java.util.List;
import java.util.ArrayList;
public class HelloWorld{
public static void main(String []args){
List<int[]> result = new ArrayList<>();
result.add(new int[]{0, 0});
result.add(new int[]{1, 1});
result.add(new int[]{2, 2});
int[][] temp = result.toArray(int[][]::new);
for(int[] value: temp) {
System.out.println("{" + value[0] + ", " + value[1] + "}");
}
}
}