Java-如何从包含泛型数组的ArrayList访问值
我有一个包含不同类型数组的通用ArrayList。我需要遍历内部数组的每个元素并访问它们。但是,由于使用泛型,我不确定如何访问内部数组元素 一旦我从ArrayList的第一个循环中获得了数组,我如何访问每个元素 这是我所拥有内容的简化版本:Java-如何从包含泛型数组的ArrayList访问值,java,arrays,arraylist,Java,Arrays,Arraylist,我有一个包含不同类型数组的通用ArrayList。我需要遍历内部数组的每个元素并访问它们。但是,由于使用泛型,我不确定如何访问内部数组元素 一旦我从ArrayList的第一个循环中获得了数组,我如何访问每个元素 这是我所拥有内容的简化版本: publicstaticvoidmain(字符串[]args){ ArrayList arrList=新的ArrayList(); 整数[]a1={1,2,3,4}; 字符串[]a2={“a”、“b”、“c”}; 双[]a3={4.0,5.0,6.0}; 增
publicstaticvoidmain(字符串[]args){
ArrayList arrList=新的ArrayList();
整数[]a1={1,2,3,4};
字符串[]a2={“a”、“b”、“c”};
双[]a3={4.0,5.0,6.0};
增加(a1);
增加(a2);
增加(a3);
打印列表(arrList);
}
公共静态无效打印列表(ArrayList arrList){
对于(E arr:arrList){
对于(E elm:arr){
系统输出打印LN(elm);
}
}
}
问题在于,在方法体中,编译器不知道E
是数组E
可以是字符串、整数或其他任何形式。嵌套循环是不可能的,因为它们不适用于这些情况
您可以在方法声明中使用ArrayList
而不是ArrayList
,使此方法仅应用于数组。当我们这样做时,E
解析为Object
,而不是Object[]
:
public static <E> void printList(ArrayList<E[]> arrList) {
for (E[] arr : arrList) {
for (E elm : arr) {
System.out.println(elm);
}
}
}
看
便于快速打印多维数组。if(arr.getClass().isArray()){for(Object o:(Object[])arr){
补遗:有数组35; deepToString
来帮助打印多维数组。我不会假设有泛型数组。泛型可以是自己的数组。我更喜欢某种if(arr.getClass().isArray())
handling@spi我之所以这样写,是因为我认为OP的目的是创建一个方法,可以打印数组的数组列表,而不是任何旧的数组列表。只是好奇。添加整数[]、字符串[]和双精度[],类型的初始ArrayList必须声明为ArrayList
对吗?或者是否有其他方法添加它?@BlackPearl您可以使用的最具体的类型是Object[]
,但您总是可以使用不太具体的类型,即Object
。但是,对于第一段代码,必须将其指定为Object[]是吗?还是我遗漏了什么?
public static void printList(ArrayList<Object[]> arrList) {
for (Object[] arr : arrList) {
for (Object elm : arr) {
System.out.println(elm);
}
}
}
System.out.println(Arrays.deepToString(arrList.toArray()));