1.泛型的存储类型
众所周知,ArrayList< E>泛型能够存储所有的对象类型,如String、对象、以及基本类型的包装类。
java中所有的基本类型如下:
那么,泛型< E>能否存储int[],String[]数组这种类型呢?答案肯定是可以的,因为在java中除了基本类型,全部的类型都是对象!
执行下面的代码,会得到对象的哈希码,这样也能验证数组的类型是对象。
int[] ints = new int[2];
System.out.println(ints);//[I@4eec7777
2.Arraylist与数组的转换(以Integer为例)
转换成对象数组
Collection集合中含有toArray方法将集合转换成对象数组:
-
toArray()
返回一个包含所有列表元素的Object数组。 -
< T> T[] toArray(T[] a):
返回一个包含所有列表元素的数组,该数组的运行时类型是指定数组的类型。如果指定数组能容纳列表中的所有元素,则会在该数组中返回元素;否则,将分配一个具有指定数组的运行时类型的新数组,并用列表中的元素填充它。
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
Integer[] array = list.toArray(new Integer[0]);
//或者指定长度
Integer[] array = list.toArray(new Integer[list.size()]);
转换成基本数据类型数组
int和Integer不是一种数据类型所以不能直接转换,需要用stream流来将转换Integer转换成int。
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
int[] array = list.stream().mapToInt(Integer::intValue).toArray();