首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.lang.IndexOutOfBoundsException:源不适合目标

java.lang.IndexOutOfBoundsException:源不适合目标
EN

Stack Overflow用户
提问于 2011-05-27 11:47:35
回答 5查看 44.9K关注 0票数 79

在以下代码中:

代码语言:javascript
复制
static void findSubsets (ArrayList<Integer> numbers, int amount, int index)
{
    ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers.size());
    Collections.copy(numbersCopy, numbers);
}

我得到了一个错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
        at java.util.Collections.copy(Collections.java:548)
        at backtracking2.Main.findSubsets(Main.java:61)

为什么?

EN

回答 5

Stack Overflow用户

发布于 2011-05-27 11:51:18

这是一个非常好的问题,几乎可以肯定的是,设置集合容量并不一定会分配底层对象,但为什么要这样做,而您可以这样做:

代码语言:javascript
复制
ArrayList <Integer> numbersCopy = new ArrayList<Integer>(numbers);
票数 28
EN

Stack Overflow用户

发布于 2011-05-27 12:03:08

构造函数ArrayList(Collection<? extends E> c)会将c中的每个元素复制到新创建的实例中,从而将numbers复制到numbersCopy中。它和numbersCopy.addAll(numbers)是一样的,这也是你真正需要的。

Collection.copy要求dest数组足够大,以容纳source数组中的所有元素,这是有道理的。类似的类比是C函数memcpy等。

票数 6
EN

Stack Overflow用户

发布于 2019-03-11 22:14:48

在创建一个ArrayList以使用Collections.copy()方法复制另一个ArrayList时,我们需要确保目标List包含与源List相同数量(而不仅仅是相同大小)的值。例如,如果源ArrayList的值为红、蓝、绿,那么目标ArrayList也应该包含相同数量的元素,如橙色、黄色、Blue.If。如果我们创建一个与源ArrayList大小相同的ArrayList,则会产生OutOfBounds异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6147650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档