我如何实现嵌套的ArrayList?

js0*_*823 4 java arrays arraylist multidimensional-array

我想实现一个看起来像这样的数据结构.

{{RowID, N1, N2, N3},
 {RowID, N4, N5, N6},
 {RowID, N7, N8, N9}}
Run Code Online (Sandbox Code Playgroud)

然后继续.它基本上是Java中的一个包含3列和RowID的表.我应该使用什么数据结构以及如何在代码中实现它?

Raf*_*ler 12

创建ArrayLists的ArrayList.例如:

ArrayList<ArrayList> arrayListOfLists = new ArrayList<ArrayList>();
arrayListOfLists.add(anotherArrayList);
//etc...
Run Code Online (Sandbox Code Playgroud)


Vin*_*nie 6

有几种选择.一种方法是声明一个表示行的类.

 public class MyRow{
     private long rowId;
     private int col1;
     private int col2;
     private int col3;
     //etc
 }
Run Code Online (Sandbox Code Playgroud)

显然,您选择了适当的数据类型和变量名称.

然后,您可以创建此类型的ArrayList:

   List<MyRow> rows = new ArrayList<MyRow>();
Run Code Online (Sandbox Code Playgroud)

如果列数不变,这尤其有用.


Sco*_*ott 3

假设 RowID 是 long 并且列数据是 Doubles,我会将此构造实现为:

import java.util.HashMap;
import java.util.Map;
...
Map<Long, Double[]> table = new HashMap<Long, Double[]>();
Run Code Online (Sandbox Code Playgroud)

存储一行:

Long rowID = 1234L;
table.put(rowID, new Double {0.1, 0.2, 0.3});
Run Code Online (Sandbox Code Playgroud)

访问一行:

Double[] row = table.get(rowID);
Run Code Online (Sandbox Code Playgroud)

将 Double[] 替换为您想要的任何数据类型 Int[]、String[]、Object[] ...

您可以使用迭代器循环访问这些数据:

import java.util.Iterator;
import java.util.Map.Entry;
...
Iterator<Entry<Long, Double[]>> iter = table.entrySet().iterator();
while (iter.hasNext()) {
    Entry entry = iter.next();
    rowID = entry.getKey();
    row = entry.getValue();
};
Run Code Online (Sandbox Code Playgroud)

要按照数据插入的顺序迭代数据,请使用 LinkedHashMap 代替 HashMap。