黑马程序员技术交流社区
标题:
copy集合疑问
[打印本页]
作者:
庄星睿
时间:
2012-7-18 10:12
标题:
copy集合疑问
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 的空列表吗?
作者:
温少邦
时间:
2012-7-18 11:48
ArrayList在初始化时是创建了一个大小为10的数组
但是Collection的copy方法为了兼容各种集合
是通过迭代器来实现的遍历
当目标集合的size小于源集合的size时
迭代至目标集合已经没有元素,但是源集合的迭代器还在进行迭代
所以同样会调用目标集合的迭代器的next()方法,
就会抛出NoSuchElementException
所以copy方法上来就检测目标集合的size是否小于源集合的size
如果是的话,就直接抛出IndexOutOfBoundsException
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2