数组和集合的转换
(1)集合转换为数组
这个方法有两种形式:toArray() 和 toArray(T[] a)
前一种是返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据转换的。有很多人会在这里吃苦头,因为他们会这样写:
Integer[] t=(Integer[])test.toArray(); 比如: List<Integer> test=new ArrayList<Integer>(); for(int i=0;i<5;i++){ test.add(i); } Integer[] t=(Integer[])test.toArray();
这样进行强制数据转换的后果就是报错:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
所以,像上面这种状况下,应该要使用的是第二种形式来转换数据。
toArray(T[] a)这个方法返回一个类T的数组。这个数组包含了List内全部的元素。
这个方法的特点就是,如果数组a的长度能够装下整个List的数据的时候,所有数据会放入到数组a当中。
如果数组a的长度不够长,那么就会返回一个数组。
也就是说使用的形式有两种:
List<Integer> test=new ArrayList<Integer>();
for(int i=0;i<5;i++){
test.add(i);
}
Integer[] t=new Integer[test.size()];
test.toArray(t);//第一种
Integer[] t3=new Integer[1];
Integer[] t2=test.toArray(t3);//第二种
如上,t和t2都是返回的数组。
最后也不免要提醒一下,转换之前不要忘记确认List内的元素是不是都可以被转换成你希望的类型,如果本身数据类型就不符合那么也就白忙活了。一定要注意集合里面的对象,比如我之前就犯过错误,集合中明明存的是Map,new了一个Person[],会抛出异常信息,貌似copy...
以上内容来源:http://www.javaeerun.com/jr_1398514189829.html
(2)数组转为集合
Arrays.asList() 方法进行转换
测试代码: package myProject; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test4 { public static void main(String[] args) { Test4 t = new Test4(); List list1 = t.array2FixSizeList(); List list2 = t.array2NormalList(); String[] arr = t.list2Array(); // list1.add("4"); // list2.add("4"); // for (Object object : list2) { // System.out.println(object); // } for (String string : arr) { System.out.println(string); } } /** * Arrays.asList返回固定大小的集合 * @return */ public List array2FixSizeList() { String[] strArr = {"1","2","3"}; List list = (List) Arrays.asList(strArr); return list; } /** * Arrays.asList返回固定大小的集合,
通过ArrayList的构造方法让其长度可以变化 * @return */ public List array2NormalList() { String[] strArr = {"1","2","3"}; List list = new ArrayList((List) Arrays.asList(strArr)); return list; } /** * 集合转换为数据 * * @return */ public String[] list2Array(){ List list = new ArrayList(); list.add("1"); list.add("2"); String[] tmpArr = new String[list.size()]; String[] arr = (String[]) list.toArray(tmpArr); return arr; } }