A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔九 中级黑马   /  2013-2-23 23:13  /  1961 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;
import java.util.*;
public class Toarray {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList<String>al=new ArrayList<String>();
                al.add("njsajdfsjkl");
                al.add("hjskdnf");
                String[]s=al.toArray(new String[0]);此处中括号中的0代表什么意思是在初始化字符数组的长度吗
                System.out.println(al);

        }

}

3 个回复

倒序浏览
首先,从api文档可知,ArrayList有两个toArray方法,
一个不带参数toArray(),一个带参数<T> T[]  toArray(T[] a)
这道题显然调用的是带参数的那个,
问题就是为什么可以传入一个new String[0]
文档说明是这样的:按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回此处。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。  
如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),那么会将数组中紧接 collection 尾部的元素设置为 null。(仅 在调用者知道列表中不包含任何 null 元素时才能用此方法确定列表长度)。
由此可见,这个参数可以做两件事
1,确定返回的数组类型要和这个参数数组类型一致。
2,如果传进去的数组能容下集合,就返回这个参数数组,多出来的部分用null填补上,否则,返回一个和传入数组类型相同的新数组,新数组正好装下集合的所有元素。
我的测试代码:
  1. public static void main(String[] args)
  2. {
  3. // TODO Auto-generated method stub
  4. ArrayList<String> al = new ArrayList<String>();
  5. al.add("njsajdfsjkl");
  6. al.add("hjskdnf");

  7. String[] s1 = al.toArray(new String[1]);
  8. System.out.println(s1.length);//结果为2
  9. for (String str : s1)
  10. {
  11. System.out.println(str);
  12. }
  13. System.out.println("-------------------------");
  14. String[] s2 = al.toArray(new String[5]);
  15. System.out.println(s2.length);//结果为5
  16. for (String str : s2)
  17. {
  18. System.out.println(str);
  19. }
  20. }
复制代码
集合中有2个元素,传入new String[1]放不下集合元素,返回正好等于集合长度的新数组,
传入new String[5],就返回这个长度为5数组,数组后3个元素用null补足。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
没有其他人回答吗
回复 使用道具 举报
你说的已经很好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马