Java 如何实现嵌套的ArrayList?
我想实现一个类似这样的数据结构Java 如何实现嵌套的ArrayList?,java,arrays,multidimensional-array,arraylist,Java,Arrays,Multidimensional Array,Arraylist,我想实现一个类似这样的数据结构 {{RowID, N1, N2, N3}, {RowID, N4, N5, N6}, {RowID, N7, N8, N9}} 然后继续。它基本上是一个Java表,有3列和RowID。 我应该使用什么样的数据结构以及如何在代码中实现它?我将创建一个包含每行数据的bean对象。这比“嵌套ArrayList”有优势,因为数据成员是强类型的 接下来,我将把这些bean插入一个列表,可能是一个LinkedList,除非您提前知道它们的数量。如果是这样,我会切换到Ar
{{RowID, N1, N2, N3},
{RowID, N4, N5, N6},
{RowID, N7, N8, N9}}
然后继续。它基本上是一个Java表,有3列和RowID。
我应该使用什么样的数据结构以及如何在代码中实现它?我将创建一个包含每行数据的bean对象。这比“嵌套ArrayList”有优势,因为数据成员是强类型的 接下来,我将把这些bean插入一个列表,可能是一个LinkedList,除非您提前知道它们的数量。如果是这样,我会切换到ArrayList
如果顺序不重要,则可以使用HashSet或HashMap,这取决于您是仅迭代它们(Set)还是需要按RowID(Map)进行键查找。如果使用这些数据结构之一,则需要为bean重写
equals()
和hashCode()
。有几个选项。一种方法是声明一个表示行的类
public class MyRow{
private long rowId;
private int col1;
private int col2;
private int col3;
//etc
}
显然,您可以选择适当的数据类型和变量名
然后可以创建此类型的ArrayList:
List<MyRow> rows = new ArrayList<MyRow>();
List rows=new ArrayList();
如果列的数量不变,这一点尤其有用 您可以使用
映射
,其中映射的键是您的RowID。制作一个ArrayList of ArrayList。例如:
ArrayList<ArrayList> arrayListOfLists = new ArrayList<ArrayList>();
arrayListOfLists.add(anotherArrayList);
//etc...
ArrayList arraylistoflist=new ArrayList();
添加(另一个ArrayList);
//等等。。。
假设RowID是一个长字符,列数据是双倍的,我将实现以下构造:
import java.util.HashMap;
导入java.util.Map;
...
Map table=newhashmap()代码>
要存储行,请执行以下操作:
Long rowID=1234L;
表.put(rowID,新双精度{0.1,0.2,0.3})代码>
要访问行,请执行以下操作:
Double[]行=table.get(rowID)代码>
将Double[]替换为所需的任何数据类型Int[]、String[]、Object[]
您可以使用迭代器循环此数据:
import java.util.Iterator;
导入java.util.Map.Entry;
...
迭代器iter=table.entrySet().Iterator();
while(iter.hasNext()){
Entry=iter.next();
rowID=entry.getKey();
row=entry.getValue();
};代码>
要按插入数据的顺序迭代数据,请使用LinkedHashMap代替HashMap。Java提供列表转换,例如,您可以通过以下方式执行此操作:
ArrayList<List<someObject>> ArrayListOfLists = new ArrayList<List<someObject>>();
ArrayList arraylistoflist=new ArrayList();
您尝试过什么?你有没有阅读过Java集合API(提示:Map、HashMap、List、ArrayList)。@Jeremy:。例如,如果您不打算对列表进行任何随机访问,而是要在列表中添加或删除元素,LinkedList
可能会更快。只需要知道每种类型的不同操作的相对成本,以及你将要做什么。@Jeremy:有参考资料吗?我很好奇。@Jeremy:看看谷歌的Jesse Wilson写的这篇文章,它展示了对于我描述的用例来说,LinkedList
beatsArrayList
。我认为这里的核心问题是我们不知道提问者是如何使用数据结构的。有几种实现:除了链接/数组列表之外,哈希集/映射也可能有用。没有更多的信息,我们根本不知道。非常感谢。这对我帮助很大。这是这个问题唯一准确的答案+1.
Long rowID = 1234L;
table.put(rowID, new Double {0.1, 0.2, 0.3});
Double[] row = table.get(rowID);
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();
};
ArrayList<List<someObject>> ArrayListOfLists = new ArrayList<List<someObject>>();