【问题标题】:Java Vector - Array index out of boundsJava Vector - 数组索引超出范围
【发布时间】:2025-12-18 18:00:01
【问题描述】:

这似乎是微不足道的,但也许我对Vectors的理解不是它应该的样子。我在这段代码中得到 [java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1] 。错误出现在第 3 行。既然看是基于 Vector 的大小,那么数组怎么会越界呢?

方法“getChangeSets()”返回一个列表。 List 最初是作为 Vector 创建的。

2   for (int i = 0; i < getChangeSets().size(); i++) {
3       ChangeSet currentChangeSet = getChangeSets().get(i);
4       if (currentChangeSet.getSequentialNumber() == sequentialNumber) {
5           return currentChangeSet;
6       }
7   }

【问题讨论】:

  • getChangeSets() 是否总是返回相同的列表,还是每次调用该方法时都会创建它?因此,请在迭代之前将列表分配给变量。
  • 对于初学者,您不应该使用Vector,原因在其文档中进行了描述。一般用ArrayList代替。
  • 完全同意 Vector 是一个不合适的选择 - 这是非常古老的遗留代码,我希望尽可能少地进行更改(Vector 声明隐藏在许多层中)

标签: java vector indexoutofboundsexception


【解决方案1】:

最好不要使用索引迭代:

for (ChangeSet currentChangeSet : getChangeSets()) {
  if (currentChangeSet.getSequentialNumber() == sequentialNumber) {
    return currentChangeSet;
  }
}

我怀疑您的代码中发生的情况是getChangeSets() 在调用之间改变了大小,特别是变小了。上面的代码只在第一次执行循环之前调用它一次。

【讨论】:

    【解决方案2】:

    请在迭代前将变更集分配给变量。

    List<ChangeSet> list = getChangeSets();
    for (int i = 0; i < list.size(); i++) {
        ChangeSet currentChangeSet = list.get(i);
        if (currentChangeSet.getSequentialNumber() == sequentialNumber) {
            return currentChangeSet;
        }
    }
    

    【讨论】: