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。但是,我似乎在做这件事时遇到了一些麻烦。我哪里错了?
答案 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)
)。