将许多元素添加到列表中,而不会实例化太多对象



我有一个for loop和 ArrayList如下:

List<VehicleImpl> vehicles = new ArrayList<VehicleImpl>();
for(int i = 0; i < input.getNoVehicles(); i++) {
                                            //Name vehicle by index
    VehicleImpl vehicle = VehicleImpl.Builder.newInstance("vehicle " + String.valueOf(i+1))
            //The first location - depot location is indexed as 0 in Matrices
            .setStartLocation(Location.newInstance(i))
            .setBreak(lunch)
            .setLatestArrival(input.getOperating())
            .setType(type)
            .build();
    vehicles.add(vehicle);
}

所以,我想问:有什么方法是我在循环外实例化VehicleImpl,并使用仅使用一个实例。对于每次迭代,我将实例修改为实例的新版本。

是的,但是您必须克隆Leat处的第一个Intance(例如,使用Beanutils)。

然后您只需更新StartLocation属性。

您可以在循环外实例化构建器,这将使您要创建的对象数量减半,但是前提名称为设置器。例如:

List<VehicleImpl> vehicles = new ArrayList<VehicleImpl>();
VehicleImpl.Builder builder = VehicleImpl.Builder.newInstance();
for(int i = 0; i < input.getNoVehicles(); i++) {
    VehicleImpl vehicle = builder
            //Name vehicle by index
            .setName("vehicle " + String.valueOf(i+1))
            //The first location - depot location is indexed as 0 in Matrices
            .setStartLocation(Location.newInstance(i))
            .setBreak(lunch)
            .setLatestArrival(input.getOperating())
            .setType(type)
            .build();
    vehicles.add(vehicle);
}

这更容易容易出错,因为在每个新迭代中,构建器中的值并未重置。这不一定是您现在的问题,但是如果您要添加有条件的逻辑,那么您可能会开始遇到很多问题。但是,如果您的目标是减少创建的对象数量,这将满足。

最新更新