【问题标题】:Can you create an array of linked lists in Java?你能在 Java 中创建一个链表数组吗?
【发布时间】:2013-02-18 01:11:16
【问题描述】:

是否可以创建一个链表数组?还是链表的arraylist?我一直在到处寻找,似乎得到了相互矛盾的答案。我已经看到“否”的答案表明它无法完成,因为您无法制作一系列可以取消引用的事物。我已经看到“是”的答案表明它可以完成并且到此为止。

提前致谢。

【问题讨论】:

  • new LinkedList<??>[666], new ArrayList<LinkedList<??>>(666);。你真正的问题是什么?
  • 为什么你做不到?
  • @Perception 你试过编译那个代码吗?
  • @LuiggiMendoza - 很明显?? 需要替换为实际的类型参数。
  • @Perception 编译器会抱怨说通用数组创建,下次在提出解决方案之前编译代码。

标签: java arrays linked-list


【解决方案1】:

我已经看到“否”的答案表明它不能完成,因为你不能制作一系列可以取消引用的东西

数组的成员值是否为null 无关紧要,如果您仍然可以“访问”该成员并对其进行实例化,则它不会被取消引用。 所以是的,你可以。

【讨论】:

    【解决方案2】:

    最糟糕的方法:创建一个原始列表数组:

    List[] lstString = new List[10];
    for(int i = 0; i < lstString.length; i++) {
        lstString[i] = new LinkedList<String>();
        lstString[i].add(Integer.toString(i));
    }
    for(int i = 0; i < lstString.length; i++) {
        for(Iterator it = lstString[i].iterator(); it.hasNext(); ) {
            System.out.println(it.next());
        }
    }
    

    更好的方法:使用包含您的 List 的包装类并创建它的数组:

    public class Holder {
        List list = new LinkedList();
    }
    
    //...
    Holder[] holders = new Holder[10];
    for(int i = 0; i < holders; i++) {
        holders[i] = new Holder();
    }
    

    更好的方法:使用List&lt;List&lt;Data&gt;&gt;

    List<List<Data>> lstOfListOfData = new ArrayList<List<Data>>();
    for(int i = 0; i < 10; i++) {
        lstOfListOfData.add(new LinkedList<Data>());
    }
    

    【讨论】:

      【解决方案3】:

      如果我没听错的话,你基本上是想制作一个二维数组,但后半部分是一个链表。

      import java.util.ArrayList;
      import java.util.LinkedList;
      
      public class Test
      {
          public static void main(String[] args)
          {
              LinkedList one = new LinkedList();
              LinkedList two = new LinkedList();
              LinkedList three = new LinkedList();
      
              ArrayList<LinkedList> array = new ArrayList<LinkedList>();
      
              array.add(one);
              array.add(two);
              array.add(three);
      
              // .. do stuff
          }
      }
      

      Java 不关心数组或列表中的对象是什么,因此没有什么反对将另一个数组或列表放入其中。

      【讨论】:

      • 如果这样设置,每个 LinkedList 会得到一个不同名字的指针吗?或者指针可以为不同的LinkedLists具有相同的名称? (例如,如果我想遍历一个链表,我需要沿 - current = current.next 移动一个指针。每个单独的链表是否可以具有相同的指针名称?或者我是否需要为指针设置不同的指针名称?每个列表,例如 currentOne、currentTwo、currentThree 等)
      • 我建议你应该使用多个指针,如果没有其他原因,只是为了让你的代码更干净和更容易理解,但你可能会使用 (current.next).next (或类似的东西)。
      猜你喜欢
      • 2021-04-30
      • 2019-06-14
      • 2011-11-14
      • 1970-01-01
      • 2018-04-14
      • 2015-11-28
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多