如何使ArrayList在java中作为二维数组?

时间:2014-07-02 08:08:21

标签: java arrays arraylist

我想在java中使用arrayList对象作为二维数组。我的问题是我们如何从arrayList中的特定维度访问值。

在二维数组中,如果我想访问值那么它可以是m [i] [j]。

但是在arraylist中我该怎么做?

7 个答案:

答案 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);