从对象ArrayList内的int数组中检索值



我正在对ArrayList进行测试,该列表包含不同的数据类型和一个int数组,我想访问数组中的一个值,例如数字55。我可以在不使用for循环的情况下直接访问此数组吗?如何重写这个int数组的toString方法,这样我就不会得到这样的条目:[I@2401f4c3?我也不知道如何正确定义for循环,因为它在控制台中只打印了一次数组,但应该打印4次。有什么想法请与我们分享。

ArrayTest类:

public class ArrayTest {
public static void main(String[] args) {
ArrayList<Object> strangeList = new ArrayList<>();
strangeList.add("String");
strangeList.add(3823);
strangeList.add(new int[] { 329, 23882, 55, 932 });
System.out.println(strangeList.size());
System.out.println();
for (int i = 0; i < strangeList.size(); i++) {
if (i == 2) {
for (int j = 0; j < strangeList.size(); j++) {
System.out.println(strangeList.get(j));
}
}
}
}
}

使用obj.getClass().isArray(),如果是数组,则检查obj的类型,如果是,则打印Arrays.toString((int[]) obj);否则,打印obj,其中obj是来自strangeList的元素。

演示:

import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
ArrayList<Object> strangeList = new ArrayList<>();
strangeList.add("String");
strangeList.add(3823);
strangeList.add(new int[] { 329, 23882, 55, 932 });
System.out.println(strangeList.size());
System.out.println();
for (int i = 0; i < strangeList.size(); i++) {
Object obj = strangeList.get(i);
Class<?> claz = obj.getClass();
if (claz.isArray()) {
if (claz.getComponentType() == int.class) {
System.out.println(Arrays.toString((int[]) obj));
} else if (claz.getComponentType() == double.class) {
System.out.println(Arrays.toString((double[]) obj));
}
// ...
} else {
System.out.println(obj);
}
}
}
}

输出:

3
String
3823
[329, 23882, 55, 932]

第二个for循环遍历的是同一个数组,而不是int数组。但由于起始数组是object类型,因此需要";告诉";(cast(java,它实际上是一个int数组。

for (int i = 0; i < strangeList.size(); i++) {
if (i == 2) {
int[] myIntArray = (int[]) strangeList.get(2);
for (int j = 0; j < myIntArray.length; j++) {
System.out.println(myIntArray[j]);
}
}
}

最新更新