1.首先,需要说明的是,只有Collection集合才有直接将其集合中的元素转为数组的方法 ,toArray()方法。而数组直接转为集合的方法是asList()方法,当然,也可以通过for循环遍历,然后挨个元素存入数组或集合。想吧Map集合中的元素存入数组也可以通过EntrySet方法,先将Map集合转换为Set集合,在通过toArray方法转为数组,这是数组中的每个元素存储的是一个键值对。
2.数组转为集合的方法:
1)通过遍历可以将数组中的每个元素挨个存入指定集合。
2)调用Arrays类中的asList()方法可以直接将一个数组转为List集合,返回一个受指定数组支持的固定大小的集合。这个方法是静态的方法,直接通过Arrays类调用,把要转换的数组作为参数传入进去。
数组转为集合的好处:
集合中封装的很多对元素的进行操作的方法,方便对数组的的元素进行操作。
需要注意的是:
1)在将数组转为集合后,不可以使用集合的增删方法,因为数组的长度是定长的,没法增删,如果增删,会抛出UnsupportedOperationException异常。
public class Test1 {
public static void main(String[] args) {
Person p1 = new Person("张三");
Person p2 = new Person("李四");
Person p3 = new Person("王五");
//Person对象数组
Person[] p = {p1,p2,p3};
List list = Arrays.asList(p);
//下面是用集合中的方法对元素进行操作
System.out.println("删除list中一个元素:"+list.remove(1));
System.out.println("向list中增加一个元素:"+list.add(p1));
}
}
会抛出这个异常:Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at Test2.Test1.main(Test1.java:30)
2)如果数组中的元素都是对象,那么变成集合的时候,数组中的元素就直接转成集合中的元素,如果数组中的元素是基本数据类型,那么系统会将该数组整个作为一个元素存入集合中去。(下面有个程序说明)
public static void main(String[] args) {
Person p1 = new Person("张三");
Person p2 = new Person("李四");
Person p3 = new Person("王五");
//Person对象数组
Person[] p = {p1,p2,p3};
List list = Arrays.asList(p);
System.out.println("person数组转为集合后,集合的长度:"+list.size());
System.out.println("person数组转为集合后的结果:\n"+list);
//整形数组
int[] i = {1,2,34,4};
System.out.println("整形数组在堆中的首地址:"+i);
List list1 = Arrays.asList(i);
System.out.println("整形数组转为集合后,集合的长度:"+list1.size());
System.out.println("整形数组转为集合后的结果:"+list1);
}
输出结果:
person数组转为集合后,集合的长度:3
person数组转为集合后的结果:
[Person [name=张三], Person [name=李四], Person [name=王五]]
整形数组在堆中的首地址:[I@15db9742
整形数组转为集合后,集合的长度:1
整形数组转为集合后的结果:[[I@15db9742]
3.集合转为数组:
集合转为数组的同样可以通过for循环挨个元素遍历,然后存入数组,但是要将集合中的元素存入数组的话,集合中的元素必须是相同类型的,因为数组只能存储相同或相兼容类型的一类数据
还可以通过toArray()方法直接转为数组。在调用这个方法时,如果指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size。当指定类型数组长度大于集合的size,就不会创建,而是使用传递进来的数组,所以,创建一个刚刚好的数组最优。
好处:因为数组元素无法进行增删操作,将集合转为数组就是为了防止其中间的元素进行增删。
public class Test1 {
public static void main(String[] args) {
Person p1 = new Person("张三");
Person p2 = new Person("李四");
Person p3 = new Person("王五");
//Person对象数组
Person[] p = {p1,p2,p3};
List list = Arrays.asList(p);
Person[] per = new Person[4];
list.toArray(per);
System.out.println("数组的长度:"+per.length);
System.out.println("数组的内容:"+Arrays.toString(per));
Person[] per1 = (Person[]) list.toArray(new Person[2]);
System.out.println("数组的长度:"+per1.length);
System.out.println("数组的内容:"+Arrays.toString(per1));
}
}
输入结果:
数组的长度:4
数组的内容:[Person [name=张三], Person [name=李四], Person [name=王五], null]
数组的长度:3
数组的内容:[Person [name=张三], Person [name=李四], Person [name=王五]]