我想创建一个数组,其中每个元素都是一个双链表。到目前为止,我拥有的是:
public ArrayOfLists() {
this.limit = limit; //limit of Nodes in each element of listArray
listArray = (DoublyLinkedList<E>[]) new DoublyLinkedList[3];
listArray[0] = new DoublyLinkedList<E>();
listArray[1] = new DoublyLinkedList<E>();
listArray[2] = new DoublyLinkedList<E>();
size = 0;
}
我不确定这在概念上是否正确,但我认为这是一个2D阵列。我对如何在这个数组中存储的列表中添加和删除对象感到困惑。例如,
public void add(E obj) {
//some stuff
}
public void remove(int index) {
//some stuff
}
我能以某种方式访问doublyLinkedList类中已经实现的方法来帮助实现这一点吗?非常感谢。
我不确定您将使用什么逻辑来确定要将obj
添加到阵列的哪个插槽,但这就是您的操作方式(当然是在实现calculateArraySlotSomehow
之后):
public void add(E obj)
{
int index = calculateArraySlotSomehow(obj);
listArray[index].add(obj);
}
根据您的意见,您可以实现calculateArraySlotSomehow
,类似于以下内容:
private int calculateArraySlotSomehow(E obj)
{
// 'count' is the total number of elements that are already
// stored in this data structure
// 'size' is the number of array elements
// 'limit' is the number of elements per list
int slot = count / limit;
if (slot >= size) {
throw new IndexOutOfBoundsException("Index: " + slot + ", Size: " + size);
}
return slot;
}
然后您必须将add
实现更改为:
public void add(E obj)
{
int index = calculateArraySlotSomehow(obj);
listArray[index].add(obj);
count++;
}
请注意,这不是线程安全的。
我很好奇你到底在努力实现什么,因为我有一种感觉,你可能会想尽办法把事情复杂化。