版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
list中的toArray()与toArray(T[] a)方法的异同
这两个方法都是List中的方法,都是将元素导出为数组,不同在于
1.输出结果
toArray()方法导出的是Object类型数组,
toArray(T[] a)方法导出的是指定类型数组
2.返回的数组是否新生成的一个数组
toArray()方法,返回的数组是新生成的一个数组
说明:对多次使用toArray()方法获取到的数组对象,对其中一个进行修改,不会影响其他toArray()方法获得的数组对象,同时也不会影响list本身存储的数据.
List<Integer> list = New ArrayList<>();
list.add(1);
list.add(2);
Object[] obj1 = list.toArray();
Object[] obj2 = list.toArray();
System.out.println(obj1==obj2); // false
toArray(T[] a)方法,返回的数组是新生成的一个数组
List<String> list = new ArrayList<>();
list.add("hellow");
list.add("world!");
String[] str = list.toArray(new String[]{});
String[] str1 = list.toArray(new String[]{});
System.out.println(str==str1); //false
3.应用
例如,需要将list集合中的元素转成数组
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
String[] strNew = new String[list.size()];
//使用toArray()方法
Object[] obj = list.toArray();
for(int i = 0; i<obj.length;i++){
String str = (String) obj[i];
strNew[i]= str;
}
//使用toArray(T[] a)方法
String[] strT = list.toArray(new String[]{});
注意:
String[] strNew = (String[]) list.toArray();这是很容易犯得的错误,结果一运行就会报错:“Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;”,会出现这个的原因:
- Object[]不能转化成String[];(这里是指数组中的说有值不能直接转化)
- java中的强制类型转换只是针对单个对象
- 如果需要转化,必须取出来其中的每一个值进行转化