简体   繁体   English

双链表列表

[英]Array of Doubly Linked Lists

I would like to create an array where each element is a doubly linked list. 我想创建一个数组,其中每个元素都是一个双向链表。 Here's what I have so far: 这是我到目前为止的内容:

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

I'm not sure if this is conceptually correct, but I kind of see this as a 2D array. 我不确定这在概念上是否正确,但是我将其视为2D数组。 I'm confused with how I go about adding and removing objects from the lists stored in this array. 我对如何从存储在此数组中的列表中添加和删除对象感到困惑。 For example, 例如,

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

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

Could I somehow access the already implemented methods in my doublyLinkedList class to assist with this? 我可以以某种方式访问​​我的doublyLinkedList类中已经实现的方法来提供帮助吗? Thank you so much. 非常感谢。

I'm not sure what logic you will use to figure out which slot of the array you want to add your obj to, but this is how you would do it (after implementing calculateArraySlotSomehow of course): 我不确定要使用哪种逻辑来确定要将obj添加到数组的哪个插槽,但这是您的操作方式(当然,在实现了calculateArraySlotSomehow之后):

public void add(E obj)
{
    int index = calculateArraySlotSomehow(obj);

    listArray[index].add(obj);
}

Based on your comments, you could implement calculateArraySlotSomehow something like this: 根据您的评论,您可以实现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;
}

And then you would have to change your add implementation to: 然后,您必须将add实现更改为:

public void add(E obj)
{
    int index = calculateArraySlotSomehow(obj);

    listArray[index].add(obj);

    count++;
}

Note that this is not thread-safe. 请注意,这不是线程安全的。

I'm curious as to what you are actually trying to accomplish, because I have a feeling that you might be going out of your way to complicate things. 我对您实际上要完成的事情感到好奇,因为我感觉到您可能会竭尽全力使事情变得复杂。

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

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