数组LinkedList的数组

时间:2012-07-22 17:47:03

标签: java collections

我有一个Text File有以下行

1) 2,3 3,2 4,5

2) 1,3 4,2 6,13

3) 1,2 4,2 5,5

4) 1,5 2,2 3,2 5,4 7,3 6,6

文本文件的行数是已知的(i,e 4)。对数字(例如:2,3)对于每一行是可变的。而数字对应的属性。

所以,为了表示这些值,我计划有一个数组链表的数组。

选择我的原因是:

1:Since i know the number of lines is 4. So it will be an array

2:Each line has a variable number of pairs. So, i will have a linked list representation for it

3:The pair values each represents a property so i will have an array size two for it. One index for each property

考虑到以上三点,我将有Array(size 4) of LinkedList of an Array(size 2)

以下是我用Java表示的方式(我是Java的新手,我必须承认我还不知道它是否正确)。

static ArrayList<Integer[]>[] graph = (ArrayList<Integer[]>[]) new ArrayList[200];

现在,考虑到上面的图形变量已经正确初始化,有人可以告诉我如何用数据填充它。如果你有关于初始化的其他一些建议或我在概念上如何分解问题,请分享。

3 个答案:

答案 0 :(得分:4)

如果我是你,我会保持简单。只需使用

之类的东西
List<List<List<Integer>>>

甚至更好,为内部类型创建自己的类。

List<PairList>

或类似内容,其中PairList扩展(或包含)ArrayList<Pair>

答案 1 :(得分:1)

使用收集框架。

ArrayList<ArrayList<ArrayList<Integer>>>

答案 2 :(得分:1)

虽然你的思维过程是可以理解的,但我认为你做出了错误的决定(可能是由于缺乏Java经验造成的) - 这是我建议的答案:

  1. 你知道线的数量是一个已知常量的常量,但直接在Java中使用数组大多没用,请改用ArrayList。它是使用数组实现的List(元组)。
  2. 你对可变数量对建模的想法似乎非常好,我同意这一点。但是,您不应该为此目的使用LinkedList,因为它通常比ArrayList慢。这两种实现都满足List接口,因此您可以将它们互换使用。
  3. 您可以将对自身建模为两个元素数组,但为了使语义更容易理解,您应该为这两个部分创建一个记录的数据类。
  4. 现在,让我们假设容器类型看起来像这样(你应该给变量和类本身更好的名字):

    class Pair {
      public final int a;
      public final int b;
    
      Pair(int a, int b){
        this.a = a;
        this.b = b;
      }
    }
    

    然后,您可以使用以下内容创建数据结构:

    final int lines = 42; // the number of lines
    List<List<Pair>> data = new ArrayList<List<Pair>>(lines);
    

    使用

    填充数据
    for(String line : input){
      final List<Pair> lineList = new ArrayList<Pair>();
      lineList.addAll(extractPairsFromLine(line));
      data.add(lineList);
    }
    

    其中extractPairsFromLine是一种采用String并返回List<Pair>的方法。