我需要圆形对象列表。每个人都应该知道前一个或下一个。我这样做了:
class Bus {
private Bus previous;
private Bus next;
public Bus() {
//anything
}
public void setPrevious(Bus bus) {
this.previous = bus;
}
public void setNext(Bus bus) {
this.next = bus;
}
private void someMethod() {
// if (previous.xxx() && next.xxx()) {
// do something
// }
}
}
我创建了一个Bus数组。在我将所有总线添加到其中后,我设置了每个元素的下一个和上一个。我觉得这很难看:D。你能建议我更好的方式吗?
答案 0 :(得分:1)
只是一个想法,但可能有一个节点的类和一个列表。通过这种方式,您可以为节点类创建一个构造函数,用于处理其下一个和最后一个引用的设置。这使得列表真的只需要担心像Add()
这样的标准列表函数。
查看List界面。
答案 1 :(得分:1)
链表不需要数组。要创建列表,您需要使用下一个和上一个方法来连接对象,并将最后一个与第一个连接起来(做循环)。使用示例(使用您的实现):
Bus one = new Bus();
Bus two = new Bus();
Bus three = new Bus();
one.setPrevious(three);
one.setNext(two);
two.setPrevious(one);
two.setNext(three);
three.setPrevious(two);
three.setNext(one);
或多或少的链接列表循环的想法。我建议see另一个问题是了解链接列表。要做到这一点很简单。
答案 2 :(得分:1)
如果您调整setNext
和setPrevious
方法,不仅要更新其实例,还要更新设置为next
和previous
的实例。在外部机制上。
因此,假设您最初创建了Bus
A
和B
。当您致电A.setNext( B )
时,它还应更新B
的上一个节点,而无需致电B.setPrevious( A )
。与在Java中向LinkedList
添加内容类似,您不必手动设置最后一个对象与刚刚添加的对象之间的链接。像
public void setPrevious(Bus bus) {
this.previous = bus;
if ( bus.next != this ){
bus.next = this;
}
}
当然,您仍然需要考虑总线已经包含在另一个List
中的情况,您必须更新List
。
因此,建议将节点与实际总线实例分开,如其他响应之一所示,这是一个更好的主意。这允许您将总线添加到多个列表,并使编写循环列表可能更容易(或者只是使用列表的可用实现)。这也是更好的OO设计,因为您可以重复使用您编写的列表。
答案 3 :(得分:0)
为什么需要阵列?您已经在每个对象中都有引用。