繁体   English   中英

双链表列表

[英]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;
}

我不确定这在概念上是否正确,但是我将其视为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++;
}

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

我对您实际上要完成的事情感到好奇,因为我感觉到您可能会竭尽全力使事情变得复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM