0

我有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

文本文件的行数是已知的(即 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 点上解决问题,请分享。

4

3 回答 3

4

如果我是你,我会保持简单。只需使用类似的东西

List<List<List<Integer>>>

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

List<PairList>

或类似的东西,其中PairList扩展(或包含)一个ArrayList<Pair>.

于 2012-07-22T17:50:20.810 回答
1

使用集合框架。

ArrayList<ArrayList<ArrayList<Integer>>>

于 2012-07-22T17:56:49.343 回答
1

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

  1. 你知道行数是一个已知常数,但是在Java中直接使用数组几乎没有用,ArrayList而是使用。它是List使用数组实现的(元组)。
  2. 您关于将变量对建模为列表的想法似乎非常好,我同意这一点。但是,您不应该将 aLinkedList用于此目的,因为它通常比 a 慢ArrayList。两种实现都满足List接口,因此您可以互换使用它们。
  3. 您可以将这些对本身建模为两个元素数组,但为了使语义更易于理解,您应该为这两个部分发明一个文档化的数据类。

现在,让我们假设容器类型看起来像这样(你应该给变量和类本身提供更好的名称):

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是采用 aString并返回 a的方法List<Pair>

于 2012-07-22T18:02:50.783 回答