我想创建一个数组,其中每个元素都是一个双向链表。这就是我到目前为止所拥有的:
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类中已经实现的方法来帮助解决这个问题吗?非常感谢。
答案 0 :(得分:0)
我不确定您将使用什么逻辑来确定要将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++;
}
请注意,这不是线程安全的。
我很想知道你究竟想要完成什么,因为我觉得你可能会不顾一切地使事情变得复杂。