为什么我不能创建2D ArrayList?

时间:2012-10-27 11:32:43

标签: java android

我正在尝试编写以下代码......

static ArrayList<RssItem>[][] list = new ArrayList<RssItem>[][]; 

这不起作用。如果我想创建一个ArrayList<RssItem>的列表?

,我做错了什么

3 个答案:

答案 0 :(得分:2)

您无法创建泛型类型的数组。所以你需要使用演员。

List<RssItem>[][] arr = (List<RssItem>[][]) new ArrayList<?>[2][2];

但实施List of List ArrayList<ArrayList<Type>>

仍然会很好
List<ArrayList<RssItem>> list = new  ArrayList<ArrayList<RssItem>>();
arr[0][0] = new ArrayList<Integer>();
arr[0][0].add(10);

答案 1 :(得分:2)

您需要在RHS上给出尺寸: -

static List<RssItem>[][] arr = (List<RssItem>[][])new List<?>[4][];

不需要column的大小,但你也可以给它: -

static List<RssItem>[][] arr = (List<RssItem>[][])new List<?>[4][5];

注意: -

您无法在specific上提供RHS类型作为类型参数。您必须使用WildCard。只有在数组中实例化list时才会给出特定类型。

要在数组中添加内容,可以使用这种循环: -

未经测试

    List<RssItem>[][] arr = (List<RssItem>[][])new ArrayList<?>[4][4];

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            arr[i][j] = new ArrayList<RssItem>();

            arr[i][j].add(new RssItem());
        }
    }

    for (List<RssItem>[] val: arr) {
       for (List<RssItem> val2: val) {
           System.out.println(val2);
       }
    }

P.S。: -

请不要使用List的二维数组。这相当于一个三维数组。即使你以某种方式让上述循环工作。这将使你的代码在将来变得混乱。而你的生活地狱。 Java中还有许多其他数据结构,您应该考虑使用Map,这在这种情况下非常有用。

即使,List达到3级也是一个非常糟糕的主意。所以,请改变你的设计。

答案 2 :(得分:0)

Array列表的通用数组=数组列表的数组列表

那就是

ArrayList<ArrayList> list = new ArrayList<ArrayList>();