双向链表数组

Array of Doubly Linked Lists

我想创建一个数组,其中每个元素都是一个双向链表。这是我目前所拥有的:

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;
}

我不确定这在概念上是否正确,但我认为这是一个二维数组。我对如何从存储在该数组中的列表中添加和删除对象感到困惑。例如,

public void add(E obj) {
    //some stuff
 }

 public void remove(int index) {
    //some stuff
 }

我能否以某种方式访问​​我的 doublyLinkedList class 中已经实现的方法来帮助解决这个问题?太感谢了。

我不确定您将使用什么逻辑来确定要将 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++;
}

请注意,这不是线程安全的。

我很好奇你到底想完成什么,因为我觉得你可能会特意把事情复杂化。