使用变量副本时索引越界

Index out of bounds when using an copy of the variable

我无法理解这个问题,所以我希望你们能很好地解释为什么这段代码不起作用。

我的 Warehouse class 中有 ArrayListPoint

这段代码工作正常(它在另一个 class 中而不是 Warehouse):

Point lastPoint = new Point(0, 0);
ArrayList<Point> localPackages = this.warehouse.getPackages();

while(true){
    if(localPackages.size() > 0){
        lastPoint = this.determineClosest(lastPoint, localPackages);
        routeTemp.add(lastPoint);
        localPackages.remove(localPackages.indexOf(lastPoint));

    }else{
        break;
    }
}

但是 Warehouse class 中的包因为被删除而消失了。所以我尝试制作一个变量的副本并在本地使用它,但我对此并不满意。

ArrayList<Point> localPackages = new ArrayList<>(this.warehouse.getPackages());

这是我收到的错误:

Exception in thread "AWT-EventQueue-0" 
     java.lang.ArrayIndexOutOfBoundsException: -1

我在这一行收到错误:

localPackages.remove(localPackages.indexOf(lastPoint));

这是 localPackages 变量的打印:

[
    java.awt.Point[x=1,y=1], 
    java.awt.Point[x=1,y=4], 
    java.awt.Point[x=2,y=0], 
    java.awt.Point[x=4,y=3], 
    java.awt.Point[x=0,y=1], 
    java.awt.Point[x=0,y=4], 
    java.awt.Point[x=1,y=0], 
    java.awt.Point[x=4,y=2]
]

那为什么我在复制变量时得到一个ArrayIndexOutOfBoundsException,而在我使用原始变量时却没有?

可能 determineClosest 使用的是原始数组,而不是传入的副本。