黑马程序员技术交流社区

标题: 集合转换成数组问题(如下代码为什么会出错误)? [打印本页]

作者: 陈妙俊    时间: 2014-4-19 11:22
标题: 集合转换成数组问题(如下代码为什么会出错误)?
本帖最后由 陈妙俊 于 2014-4-20 08:34 编辑

import java.util.*;

public class CollectionsToArray {
        public static void main(String[] args) {
                List<String> list = new ArrayList<String>();
                list.add("abc");
                list.add("aaa");
                list.add("bbbb");
                list.add("adffer");
                list.add("zzz");
                list.add("kkk");
                System.out.println(Arrays.toString((String[])list.toArray()));
        }
}

作者: 左拉    时间: 2014-4-19 11:29
本帖最后由 左拉 于 2014-4-19 12:04 编辑

List本身具有转换成数组功能:
1:toArray()转换成Object数组
2:toArray(T[]) 转换成泛型数组:

看看以下代码:

  1. import java.util.*;

  2. public class CollectionsToArray {
  3.         public static void main(String[] args) {
  4.                 List<String> list = new ArrayList<String>();
  5.                 list.add("abc");
  6.                 list.add("aaa");
  7.                 list.add("bbbb");
  8.                 list.add("adffer");
  9.                 list.add("zzz");
  10.                 list.add("kkk");
  11.                //第一种方法:转换成Object数组,然后转换为字符串数组
  12.                Object[] obj=list.toArray();
  13.                for(int i=0;i<obj.length;i++)
  14.                {
  15.                     //转换成字符串
  16.                    String str=(String)obj[i];
  17.                    System.out.println(str);
  18.                 }

  19.                //第二种方法:直接转换成字符串数组:
  20.                 String[] strs=list.toArray(new String[]{});
  21.                 for(int i=0;i<strs.length;i++)
  22.                 {
  23.                    System.out.println(strs[i]);
  24.                 }
  25.         }
  26. }
复制代码

作者: 左拉    时间: 2014-4-19 11:33
本帖最后由 左拉 于 2014-4-19 11:35 编辑

如果按照你那方法,应该是Arrays.toString(list.toArray(new String[]{}));
Arrays.toString((new String[]{})list.toArray());
这样不知道行不行,我没开发工具= =。

作者: 天涯追梦    时间: 2014-4-19 14:08
List本身具有转换成数组功能:
1:toArray()转换成Object数组
2:toArray(T[]) 转换成泛型数组:
3:toString().toCharArray()转换成字符数组
前两个楼上的已经说过了,第三个的代码如下:

  1. import java.lang.reflect.Array;
  2. import java.util.*;

  3. public class CollectionsToArray {
  4.         public static void main(String[] args) {
  5.                 List<String> list = new ArrayList<String>();
  6.                 list.add("abc");
  7.                 list.add("aaa");
  8.                 list.add("bbbb");
  9.                 list.add("adffer");
  10.                 list.add("zzz");
  11.                 list.add("kkk");
  12.                char [] a = list.toString().toCharArray();
  13.                 System.out.println(a);
  14.                 for (char c : a) {
  15.                                         System.out.println(c);
  16.                                 }
  17.         }
  18. }
复制代码



作者: 呆呆沙师妹    时间: 2014-4-19 14:30
如楼上所说:List本身具有转换成数组功能,list.toArray()返回的结果是Object数组,
(String[])list.toArray()),这样做就是将Object数组强制转换为String[]数组,这是编译器不允许的。会报类型转换错误。
System.out.println(Arrays.toString(list.toArray()));直接就能输出。
作者: 左拉    时间: 2014-4-19 18:10
呆呆沙师妹 发表于 2014-4-19 14:30
如楼上所说:List本身具有转换成数组功能,list.toArray()返回的结果是Object数组,
(String[])list.toArra ...

这个靠谱:)
作者: 左拉    时间: 2014-4-19 19:12
本帖最后由 左拉 于 2014-4-19 19:59 编辑
天涯追梦 发表于 2014-4-19 14:08
List本身具有转换成数组功能:
1:toArray()转换成Object数组
2:toArray(T[]) 转换成泛型数组:


其实第三种方法只适合字符串对不对:),假设自定义一个student类

  1. import java.util.*;

  2. class Student{
  3.     private String name;
  4.     private int age;
  5.     public Student(String name,int age){
  6.          this.name=name;
  7.          this.age=age;
  8.      }
  9.      public String toString(){
  10.          return this.name+","+this.age;
  11.     }
  12. }

  13. public class CollectionsToArray {
  14.         public static void main(String[] args) {
  15.                 List<Student> list = new ArrayList<Student>();
  16.                 list.add(new Student("test-a",21));
  17.                 list.add(new Student("test-b",11));
  18.                 list.add(new Student("test-c",19);                                                
  19.               //第一种方法:转换成Object数组,然后转换为Student数组
  20.                Student[] stus=list.toArray();
  21.                for(int i=0;i<stus.length;i++)
  22.                {
  23.                     //转换成字符串
  24.                    String stu=(Student)stus[i];
  25.                    System.out.println(stu);
  26.                 }

  27.                //第二种方法:直接转换成Student数组:
  28.                 Student[] stus=list.toArray(new Student[]{});
  29.                 for(int i=0;i<stus.length;i++)
  30.                 {
  31.                    System.out.println(stus[i]);
  32.                 }
  33.         }
  34. }
复制代码
这样的情况就不能用toCharArray()方法读取list中的数据了,所以这个方法只能用于字符串数组。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2