Java 如果我有许多具有顺序的堆栈,如何最好地遍历它们以获得正确的位置?

Java 如果我有许多具有顺序的堆栈,如何最好地遍历它们以获得正确的位置?,java,oop,stack,Java,Oop,Stack,我正在爪哇为一个停车场建模 在我的停车场课程中,我有三个代表不同大小的自由点的堆栈 public class CarPark { Stack<Spot> smallSpots; Stack<Spot> mediumSpots; Stack<Spot> largeSpots; 现在,我有了一个与我的停车场类的方法,它采取了一辆车,并检查了一个地点的权利堆栈,如果一个地点是可用的,采取它 车辆可以有三种尺寸,也可以是小型、中型或大型。小

我正在爪哇为一个停车场建模

在我的停车场课程中,我有三个代表不同大小的自由点的堆栈

 public class CarPark {
    Stack<Spot> smallSpots;
    Stack<Spot> mediumSpots;
    Stack<Spot> largeSpots;
现在,我有了一个与我的停车场类的方法,它采取了一辆车,并检查了一个地点的权利堆栈,如果一个地点是可用的,采取它

车辆可以有三种尺寸,也可以是小型、中型或大型。小型车辆可以安装在任何尺寸的点中,中型车辆可以安装在中型或大型点中,大型车辆只能安装在大型点中

我的问题是,检查给定车辆的每个堆栈最有效的方法是什么(就性能和编写的代码量而言?

我真的不想做这样的事:

if(vehicle.getSize().equals(VehicleSize.Small)){
//check small spots
//check medium spots
//check large spots
}

if(vehicle.getSize().equals(VehicleSize.Medium)){
//check medium spots
//check large spots
}


if(vehicle.getSize().equals(VehicleSize.Large)){
//check large spots
}
因为这似乎有点太硬了,而且如果我决定增加点和车辆的尺寸,它也不会缩放。

您可以使用开关直通和返回来实现此(特定)情况:

switch (vehicle.getSize()) {
case VehicleSize.Small:
  // check small spots, return if found
case VehicleSize.Medium:
  // check medium spots, return if found
case VehicleSize.Large:
  // check large spots, return if found
}

不应该有
break
语句,因此如果小型车的小型点检没有成功,那么接下来将检查中型点检,以此类推。在按下
开关后,您可以抛出一个错误或返回一个
null
,以指示未找到任何斑点。

假设:
车辆大小按自然顺序定义:

public enum VehicleSize {
    SMALL, MEDIUM, LARGE;
}
public enum VehicleSize {
    SUB_COMPACT, SMALL, MEDIUM, LARGE;
}
然后可能会有一个
列表斑点大小
,其中每个元素的索引指的是
车辆大小
的序数值,例如,
斑点大小。get(1)
指的是
车辆大小.中等
斑点的堆栈

List<Stack<Spot>> = new ArrayList<>(VehicleSize.values().length);
// ... init each stack, and need something to indicate how many spots are available for that VehicleSize

public boolean isParkingSpotAvailable(Vehicle v) {
    for (int size = v.getSize().ordinal(); size < VehicleSize.values().length; size++) {
        if (spotSizes.get(size) available spots > 0) {
           return true;
        }
    }
        return false;
}
然后,
ismarkingspotavailable()
将不必更改。但是仍然需要某种方法来初始化相关堆栈,可能是在属性文件中:

 SUB_COMPACT.available.spots=12
 SMALL.available.spots=24
 MEDIUM.available.spots=100
 LARGE.available.spots=42

你说的“最好的方法”是什么意思?事实上,你的问题太主观了,不适合这个网站。@JoeC谢谢,我已经修改了
 SUB_COMPACT.available.spots=12
 SMALL.available.spots=24
 MEDIUM.available.spots=100
 LARGE.available.spots=42