双重链接列表数组



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

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

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

我很好奇你到底在努力实现什么,因为我有一种感觉,你可能会想尽办法把事情复杂化。

相关内容

  • 没有找到相关文章

最新更新