黑马程序员技术交流社区

标题: 关于动态数组的问题 [打印本页]

作者: 闫玉泉    时间: 2012-2-28 01:13
标题: 关于动态数组的问题
看API上的ArrayList的文档有两个函数用于往数组里传递数据 如何使用?
toArray();
toArray(T[] a);
我往数组里传递数据的时候总是出错。
作者: 张乃智    时间: 2012-2-28 09:13
 ArrayList<String []> arr = new ArrayList<String []>();
  arr.add(new String[]{"a","b"});
  arr.add(new String[]{"c","d"});
  String [][] str_a = (String[][]) arr.toArray();//这几行代码会有ClassCaseException异常
  执行上面这几行代码 会有ClassCaseException异常 ,再看看那下边这行代码
ArrayList<String []> arr = new ArrayList<String []>();
  arr.add(new String[]{"a","b"});
  arr.add(new String[]{"c","d"});
  String [][] str_a = (String[][]) arr.toArray(new String[0][0]);
这几行代码就可以了。
      可以看出,不带参数的toArray()方法,是构造的一个Object数组,然后进行数据copy,此时进行转型就会产生ClassCastException
  而带参数的toArray(T[] a) 方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object 数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常
1. String[][] str_a = (String [][]) arr.toArray(new String[0][0]);
  2. String[][] a = new String[<size>][size];
  String [][] str_a = (String [][]) arr.toArray(a);
一般都用这两种方法。
作者: 王--明    时间: 2012-2-28 09:55
楼上说的很到位,总结。收下了。




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