为什么Collections.copy不会增加目的地的大小?

Phi*_*der 5 java collections list

我正在使用以下代码:

List<Object> dest = new LinkedList<Object>();
Collections.copy(oldList, src);
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,出现异常:

java.lang.IndexOutOfBoundsException: Source does not fit in dest
    at java.util.Collections.copy(Collections.java:589)
Run Code Online (Sandbox Code Playgroud)

我知道如何解决这个问题,但是我不明白的是:

当我手动添加元素时,列表将自动增加容量。为什么Collections#copy不能这样做?

sti*_*ike 3

因为这就是它的实现方式。如果您查看此方法的源代码,您会看到

 if (srcSize > dest.size())
    throw new IndexOutOfBoundsException("Source does not fit in dest");
Run Code Online (Sandbox Code Playgroud)

所以如果你想实现自增,那就自己写方法吧。

  • 这是一个正确的答案。该方法称为 copy 并执行文档中指定的操作:复制元素。没有任何地方提到目的地的修改。 (3认同)
  • 不,严格来说这个答案是不正确的。该行为之所以存在,是因为 API 文档中是这样定义该方法的。并不是因为某些供应商决定将几行代码放入 JVM 的任意实现中。 (2认同)