繁体   English   中英

我如何实现嵌套的ArrayList?

[英]How do I implement nested ArrayList?

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

{{RowID, N1, N2, N3},
 {RowID, N4, N5, N6},
 {RowID, N7, N8, N9}}

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

创建ArrayLists的ArrayList。 例如:

ArrayList<ArrayList> arrayListOfLists = new ArrayList<ArrayList>();
arrayListOfLists.add(anotherArrayList);
//etc...

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

 public class MyRow{
     private long rowId;
     private int col1;
     private int col2;
     private int col3;
     //etc
 }

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

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

   List<MyRow> rows = new ArrayList<MyRow>();

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

您可以使用Map<Integer, ArrayList<MyObject>> ,其中地图的键将是您的RowID。

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

import java.util.HashMap;
import java.util.Map;
...
Map<Long, Double[]> table = new HashMap<Long, Double[]>();

要存储一行:

Long rowID = 1234L;
table.put(rowID, new Double {0.1, 0.2, 0.3});

要访问一行:

Double[] row = table.get(rowID);

将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();
};

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

我将创建一个包含每行数据的bean对象。 这比“嵌套ArrayList”更有优势,因为数据成员是强类型的。

接下来,我会将这些bean插入List,可能是LinkedList,除非你提前知道它们的数量。 如果是这样,我会切换到ArrayList。

如果顺序不重要,则可以改为使用HashSet或HashMap,具体取决于您是仅迭代它们(Set)还是需要按RowID(Map)进行键查找。 如果您使用这些数据结构之一,则需要覆盖bean的equals()hashCode()

Java提供了列表转换,例如,您可以通过以下方式执行此操作:

ArrayList<List<someObject>> ArrayListOfLists = new ArrayList<List<someObject>>();

暂无
暂无

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

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