gpt4 book ai didi

java - TreeSet 允许多个相同类型的对象
转载 作者:行者123 更新时间:2023-11-29 07:01:04 25 4
gpt4 key购买 nike

我有一个 TreeSet<Floor>存储电梯要访问的楼层的对象。 Floor是一个抽象类,它由具体的地板类扩展,例如 FloorOne、FloorTwo 等。根据我的逻辑 TreeSet<Floor>每个 Floor 应该只存储一个实例子类型,但我可以插入每个子类型的多个实例。 Floor类(class)工具Comparable这样我就可以在 TreeSet<Floor> 中对楼层进行分类根据他们的数量。下面是类 Floor 的代码

public abstract class Floor implements Comparable<Floor>{

protected int floorNo;
public abstract void floorVisited();
public int getFloorNo() {
return floorNo;
}
@Override
public int compareTo(Floor floor) {
return this.getFloorNo() > floorButton.getFloorNo() ? 1 : -1;
}
}

其中一个子类型的代码:

public class FloorOne extends Floor{

public FloorOne(){
floorNo = 1;
}
@Override
public void floorVisited() {
System.out.println("Floor No. " + floorNo + " was visited");
}
}

将楼层添加到 TreeSet<Floor>通过调用 ElevatorController 的 addFloor() 方法。

controller.addFloor(new FloorFour());
controller.addFloor(new FloorFour());
controller.addFloor(new FloorTwo());

ElevatorController 中的 addFloor() 方法。

private TreeSet<Floor> travelUpwards;
private TreeSet<Floor> travelDownwards;

public void addFloor(Floor floor) {

if (floor.getFloorNo() > currentFloor.getFloorNo()) {
travelUpwards.add(floor);
} else if (floor.getFloorNo() < currentFloor.getFloorNo()) {
travelDownwards.add(floor);
}
}

我得到的输出是:

Floor No. 2 was visited
Floor No. 4 was visited
Floor No. 4 was visited

根据我的理解,对象的新实例 FloorFour当我调用 addFloor(new FloorFour()) 时创建这就是为什么 TreeSet<Floor>不要认为它们是重复的。但是有没有一种方法可以停止多次插入同一楼层。

最佳答案

正确实现 compareTo() 方法可能会解决您的问题。

@Override
public int compareTo(Floor floor) {
return this.getFloorNo() - floor.getFloorNo();
}

关于java - TreeSet<Object> 允许多个相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058700/

25 4 0