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