1.数组转集合
数组转换为集合要用到Arrays工具类
Arrays工具类是对操作数组提供的一个工具
public class ArrayTest {
public static void main(String[] args) {
String[] s = {"a","z","f"};
List<String> list = Arrays.asList(s);
System.out.println(list);
}
}
结果:
[a,z,f]
这样做是为了使用集合里的方法来操作数组中的元素,但是有一个问题就是转换后的集合不能使用集合的增删方法,因为数组的长度是固定的,
如果使用了增删方法将会报UnsupportedOperationException(不支持操作异常)的错
如果数组中存的是基本数据类型的话,那么在转为集合时,将会把给数组整个当做一个元素存入集合
public class ArrayTest {
public static void main(String[] args) {
int[] arr = new int[]{1,4,6,3};
List<int[]> list = Arrays.asList(arr);
System.out.println(list);
}
}
结果为该数组的哈希值
如果想把数组中每个元素都作为一个元素存入转换的集合中那么它的元素必须都是对象类型
public class ArrayTest {
public static void main(String[] args) {
Integer[] arr = new Integer[]{1,3,5};
List<Integer> list = Arrays.asList(arr);
System.out.println(list);
}
}
结果:
[1, 3, 5]
这是因为无论几维的数组他们的父类都是Object,所以在转换时会把数组当做一个对象来处理
证明:
public class SzTest {
public static void main(String[] args) {
int[] i1 = new int[5];
int[][] i2 = new int[5][2];
System.out.println(i1.getClass().getSuperclass().getName());//通过反射打印父类名
System.out.println(i2.getClass().getSuperclass().getName());
Object obj1 = i1;//数组可以赋值给一个Object类型
Object obj2 = i2;
}
}
结果:
java.lang.Object
java.lang.Object
两次输出是一样的
2.集合转数组
将集合转换为数组是为了限定对元素的操作,不需要增删了
使用ArrayList集合自带的方法转换
public class CollectionToArray {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("s");
al.add("qa");
al.add("ab");
String[] s = al.toArray(new String[0]);
System.out.println(Arrays.toString(s));
}
}
结果:
[s, qa, ab]
这里要注意的就是
String[] s = al.toArray(new String[0]);
这个方法的参数是一个数组,它的长度可以给0也可以给比集合长度大的数,如果给了比集合长度小的数那么在该方法内部会创建一个长度为集合长度的新的数组,如果大于集合的长度那么就会用传进来的数组
但是这样都会造成空间浪费,所以给的数组大小最好是和集合一样长度为最优
public class CollectionToArray {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("s");
al.add("qa");
al.add("ab");
String[] s = al.toArray(new String[<span style="color:#ff0000;">al.size()</span>]);
System.out.println(Arrays.toString(s));
}
}