检查是否存在,如果不添加

时间:2013-11-26 13:58:35

标签: java

public void land(Plane plane) {
  Plane idC =(Plane) plane;
  if(!Planes.contain(idC.getId())) {
    id=id+1;
    idC.setId(id);
    Planes.add(idC);
  }
}

Plane有一个带有一些字符串和连续符的结构,它包含一个id Plane(string,string,int,int)。我试图找到我的arraylist Planes是否已包含飞机的id。如果它什么都不做如果没有,添加平面,同时也给它一个新的id。但是,我似乎在做这件事时遇到了一些麻烦。我哪里错了?

2 个答案:

答案 0 :(得分:0)

如果Planes是Plane的数组列表,则只需将Plane作为对象传递,以检查它是否包含在数组列表中.... 您可能需要声明这样的数组列表:ArrayList<Plane> Planes = ..

答案 1 :(得分:0)

虽然我不太确定你背后的逻辑,但我假设你想要这样的东西:

public class Planes {
    private Map<String, Plane> planes;

    public Planes() {
        this.planes = new HashMap<String, Plane>();
    }

    public boolean contains(Plane plane) {
        return this.planes.contains(plane.getId());
    }

    public void add(Plane plane) {
        this.planes.put(plane.getId(), plane);
    }
}

public class SomePlaneRelatedClass {
    private Planes planes;

    public SomePlaneRelatedClass() {
        this.planes = new Planes();
        ...
    }

    ...

    public void land(Plane plane) {
        if (!this.planes.contains(plane)) {
            plane.setId(/* some generated ID */);
            this.planes.add(plane);
        }
    }
}
}

但有一条评论。如果您的集合中包含飞机,请不要使用列表。

想象一下,当你有很多飞机时,你正在查询最后一架飞机。它将迭代整个列表以找到它(时间复杂度为O(n))。而是使用将您的UUID映射到您的平面的地图并通过UUID获取它,这应该更快(O(1))。