gpt4 book ai didi

java - Collections.copy 是否损坏(在 OpenJDK 6 中)?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:04:11 26 4
gpt4 key购买 nike

有时我的效率似乎很低。当我快要完成输入时,我设法在 Sun 找到了适当的错误报告。然后我想好吧,还不如把它贴出来,有截图什么的。答案如下。

我知道,“SELECT 没有损坏”,这始终是我的错。但是在这里,我真的不明白为什么会这样。我的代码片段:

List<IGraphEdge> rgSrc = this._rgGetPath();
List<IGraphEdge> rgDst = new ArrayList<IGraphEdge>(rgSrc.size());
Collections.copy(rgDst, rgSrc);

这将抛出一个带有消息的 IndexOutOfBoundException

java.lang.IndexOutOfBoundsException: Source does not fit in dest        at java.util.Collections.copy(Collections.java:548)

在调试器中,当我进入 Collections.copy 时,两个 ArrayList 实例如下所示:

Debugger view http://static.theuprightape.net/ql/img/debugger.png

因此,dest 中有能力容纳来自 src 的那个元素,尽管自然而然地,dest 的 size 还是0,毕竟这是我要通过调用copy()来改变的。

查看OpenJDK实现的源码,很清楚为什么会报错:

public static <T> void copy(List<? super T> dest, List<? extends T> src) {
int srcSize = src.size();
if (srcSize > dest.size())
throw new IndexOutOfBoundsException("Source does not fit in dest");

所以请告诉我,这是一个错误,还是我做错了什么?

最佳答案

不是看容量,而是看大小。也就是说,目标应该包含将被源列表覆盖的元素。

我从来没有遇到过这会很有用的情况。通常您需要的是 List 实现之一中的复制构造函数,或 Collection 接口(interface)的 addAll 方法。

关于java - Collections.copy 是否损坏(在 OpenJDK 6 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com