我正在创建一个链表,我正在试图弄清楚如何编写一个方法来返回特定索引的节点有效负载。向量是如何得到的(int index)我想实现类似的东西。此外,通过这个功能,我可以很容易地添加一个add(int index,e Element),这对于循环双向链表来说非常方便。
在我的DynamicNode文件中,我用这种方式实现了它:
public class DynamicNode {
private Object info;
private DynamicNode next, previous;
private int position;
public DynamicNode(Object x) {
info = x;
}
public Object getInfo() {
return info;
}
public DynamicNode getNext() {
return next;
}
public DynamicNode getPrevious() {
return previous;
}
public int getPosition() {
return position;
}
public void setInfo(Object x) {
info = x;
}
public void setNext(DynamicNode n) {
next = n;
}
public void setPrevious(DynamicNode m) {
previous = m;
}
public void setPosition(int x) {
position = x;
}
}
我的LinkedList.java文件中有一个计数器,它递增和递减节点数,以便索引传递。
我认为get(int index)语句可行的唯一方法是在get方法中运行一个循环来检查节点的索引,当匹配正确的索引时,它返回与之相关的信息。节点,但这似乎是一个非常密集的过程。
提前致谢,如果有更多信息需要发布,我会尽力填补空白。
我的插入方法
public void insert(DynamicNode node) {
//set node's previous node to the last node entered
node.setPrevious(last);
//set previous node's next to node
last.setNext(node);
//set node's next to first node
node.setNext(first);
//increase numNodes pool
numNodes++;
//sets new last node
last = node;
//sets node position
node.setPosition(numNodes);
}
答案 0 :(得分:3)
这是链表的主要缺点:索引的随机访问是O(n),而不是数组支持的列表的O(1)。这就是他们的工作方式。
你可以通过跳过列表使事情变得更好,但这会使事情变得更复杂,并且需要更多的内存。
注意,在每个节点中存储索引会使情况变得更糟,因为在第一个索引处插入一个节点(应该是没有存储索引的O(1))会变成带索引的O(n),因为你需要访问列表中的每个节点都会增加其索引。通过存储此索引,您基本上可以从链接列表和数组列表中获得更糟糕的部分。
为什么要实施链接列表,而不是使用标准java.util.LinkedList
?