【发布时间】:2013-12-03 07:02:07
【问题描述】:
我正在使用“桶”实现(双)链表。简而言之,一个节点的双向链表,每个节点都持有一个 ArrayList,其大小由参数指定。
我已经初始化了我的节点和列表如下:
public class MyLinkedList<T> implements ADTListInterface<T> {
ArrayList<T> list;
private class Node {
T value;
Node next;
Node previous;
ArrayList<T> list;
public Node(Node n, Node p) {
list = new ArrayList<T>(bucketSize);
next = n;
previous = p;
}
}
private Node head;
private Node tail;
private int bucketSize;
public MyLinkedList(int bucketSize) {
this.bucketSize = bucketSize;
head = tail = new Node(null, null);
}
我已经像这样设置了我的添加方法:
public void add(T o) {
Node current = head;
while (current.list.add(o) != true) {
if (current.next != null) {
current = current.next;
}
if (current.next == null) {
current.next = new Node(null,current);
}
}
}
在使用 bucketSize = 3 和以下命令测试 add 方法时:
list.add("a");
list.add("b");
list.add("c");
我希望头节点包含一个列表,其元素和顺序如下:
c,b,a
但是,current.list.add(o) 行似乎多次添加指定的对象,直到填满列表。所以我的节点原来包含元素:
一个,一个,一个
提前感谢您查看我的代码。
【问题讨论】:
-
ArrayList add 总是保证为真,不需要那个while循环。你应该能够做 current.list.add(o);然后进行检查以确保正确设置头部和尾部。
-
几乎感觉像是在作弊;您正在使用已知的有效 ADT 来支持您的列表。您确定可以在代码中使用
ArrayList? -
我对 Java 编程还很陌生,我不确定 Makoto 的意思。作为这个项目的一部分,我得到了这个接口。据我了解,我需要填写类中接口中列出的每个方法。
-
和 Bucco,我的想法是这样的;尝试将对象添加到第一个节点,如果不存在,则检查下一个节点是否存在,如果存在则尝试将其添加到那里,如果不存在则创建下一个节点然后尝试将其添加到那里。跨度>
-
我明白了。但是,所有内容都将被推入第一个 ArrayList。传递给 ArrayList 构造函数 (bucketSize) 的值不是 ArrayList 的最大大小,而是实际上 ArrayList 内数组的起始大小。 ArrayList 将继续增长,您将始终添加到第一个 arraylist,永远不会添加到下一个。您可能需要考虑使用数组,而不是使用数组列表,因为大小是固定的。
标签: java arraylist computer-science