我想在java中使用arrayList对象作为二维数组。我的问题是我们如何从arrayList中的特定维度访问值。
在二维数组中,如果我想访问值那么它可以是m [i] [j]。
但是在arraylist中我该怎么做?
答案 0 :(得分:2)
你的意思是List
??
List
可能就像......
List<List<...>> twoDList = new ArrayList<>();
我想创建一个List,其中每个List键包含其中的另一个List
它应该更像是你想要某种Map
,它基本上是一个键/值对。
Map<String, List<String>> mapValues = new HashMap<>(25);
List<String> listOfValues = ...;
//...
mapValues.put("A unique key for this list", listOfValues);
//...
List<String> thatListOfValues = mapValues.get("A unique key for this list");
答案 1 :(得分:2)
List<List<Integer>> list = new ArrayList<List<Integer>>();
list.add(new ArrayList<Integer>());
list.add(new ArrayList<Integer>());
list.get(0).add(5);
list.get(1).add(6);
for(List<Integer> listiter : list)
{
for(Integer integer : listiter)
{
System.out.println("" + integer);
}
}
这样你就可以获得像
这样的项目list.get(1).get(0); //second dimension list -> integer
编辑:
虽然如果你试图为每个列表使用数字索引,你可以使用Map,如下所示:
Map<Integer, List<YourObject>> map = new HashMap<Integer, List<YourObject>>();
map.put(0, new ArrayList<YourObject>());
map.put(5, new ArrayList<YourObject>());
map.get(0).add(new YourObject("Hello"));
map.get(5).add(new YourObject("World"));
for(Integer integer : map.keySet())
{
for(YourObject yourObject : map.get(integer))
{
yourObject.print(); //example method
System.out.println(" ");
}
}
虽然即使这样,列表的访问也会像以前一样,
map.get(0).get(1); //List -> value at index
显然,您不需要使用Integers作为泛型类型参数,它只是一个占位符类型。
答案 2 :(得分:1)
记忆是这里的一个重要考虑因素。
可以接受使用1D容器建模2D(或更高维度)数组。 (这就是微软COM的VARIANT SAFEARRAY的工作方式。)但,如果元素数量很大,请仔细考虑;特别是如果容器分配连续的内存块。使用像List<List<...
这样的东西会模拟锯齿状的矩阵,并且会破坏你的记忆。
使用1D方法,您可以使用get(index)
方法对ArrayList
进行适当转换:
给定第(i)行和第(j)列,使用index = i * rows + j
进行变换,其中rows
是矩阵中的行数。
答案 3 :(得分:1)
像List<List<..>>
这样的解决方案很慢,那么你应该使用像
// Two dimentions: m and n
List<String> arr = new ArrayList<String>(m*n);
for (int i=0; i< m; ++i) {
for (int j=0; j<n; ++j) {
String str=arr.get(i*n + j);
//You code here
}
}
答案 4 :(得分:0)
arraylist不是制作2维阵列的对象。但是你仍然可以使用它: 您可以使用:
new ArrayList<ArrayList<Object>>; //or
new ArrayList<Object[]>;
但是你应该实现自己的矩阵类,因为你可能需要做一些检查,函数get(int row, int column)
会很酷
答案 5 :(得分:0)
另请考虑Google Guava库提供的Table
集合。 ArrayTable
是基于2D数组的实现。
答案 6 :(得分:0)
你可以像这样定义
1&GT;
List<Object[]> list = new ArrayList<Object[]>();
撷取
list.get(i)[j];
2 - ;
List<Map<Integer,Object>> list = new ArrayList<Map<Integer,Object>>();
撷取
list.get(i).get(j);