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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄星睿 中级黑马   /  2012-7-18 10:12  /  1482 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Collections工具类里提供了copy方法,能够将集合中的元素复制到另一个集合


public static void  copyDemo()
{
  List<String> list=new ArrayList<>();
  list.add("abccd");
  list.add("aa");
  list.add("b");
  list.add("z");
  list.add("bcd");
  list.add("bcde3");
  sop(list);
  List<String> newlist=new ArrayList<>();
  //newlist.add("test"); //这里 必须添加到六个以上的元素才可以。
  Collections.copy(newlist,list);
  sop(newlist);
  sop(newlist.size());

}

API 里注释
将所有元素从一个列表复制到另一个列表。执行此操作后,目标列表中每个已复制元素的索引将等同于源列表中该元素的索引。目标列表的长度至少必须等于源列表。如果目标列表更长一些,也不会影响目标列表中的其余元素。

但直接复制会报数组下标溢出,ArrayList集合在初始化的时候不是默认分配了容量为 10 的空列表吗?

1 个回复

倒序浏览
ArrayList在初始化时是创建了一个大小为10的数组
但是Collection的copy方法为了兼容各种集合
是通过迭代器来实现的遍历

当目标集合的size小于源集合的size时
迭代至目标集合已经没有元素,但是源集合的迭代器还在进行迭代
所以同样会调用目标集合的迭代器的next()方法,
就会抛出NoSuchElementException

所以copy方法上来就检测目标集合的size是否小于源集合的size
如果是的话,就直接抛出IndexOutOfBoundsException
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马