初始化ArrayList数组

时间:2012-04-19 11:38:25

标签: java arrays string arraylist initialization

如何初始化Array的{​​{1}}?

我尝试了这种语法,但它不起作用:

ArrayList<String>

4 个答案:

答案 0 :(得分:11)

该语法适用于非泛型ArrayList(ideone)

不适用于通用ArrayList<E>(ideone)

此代码:

ArrayList<String>[] subsection = new ArrayList<String>[4];

出现编译错误:

Main.java:8: generic array creation
        ArrayList<String>[] subsection = new ArrayList<String>[4];

对于通用版本,请使用ArrayList<ArrayList<E>>

ArrayList<ArrayList<String>> subsection = new ArrayList<ArrayList<String>>();

答案 1 :(得分:9)

你可以这样定义:

ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10];
    lists[0] = new ArrayList<String>();
    lists[0].add("Hello");
    lists[0].add("World");
    String str1 = lists[0].get(0);
    String str2 = lists[0].get(1);
    System.out.println(str1 + " " + str2);

答案 2 :(得分:5)

好的评论之后,我认为......你说得对,为什么不呢。

想出来。

ArrayList[] test = new ArrayList[4];

test[3] = new ArrayList<String>();
test[3].add("HI");

System.out.println(test[3].get(0));

虽然我会诚实,但我不确定为什么会这样。

将第一项测试作为新集合分配后,它将只允许阵列中的所有其他项目成为该类型。所以你做不到

test[3] = new ArrayList<String>();
test[2] = new HashSet<String>();

答案 3 :(得分:1)

将泛型作为类型澄清过程,您可以将类型值分配给原始类型的变量,反之亦然。在核心泛型中,程序员可以避免过多地进行类型转换,这也有助于在编译时捕获一些逻辑错误。 在基础知识中,ArrayList将始终隐式具有Object类型的项目。

所以

test[i] = new ArrayList<String>(); because test[i] has type of ArrayList.

test[3] = new ArrayList<String>();
test[2] = new HashSet<String>();

没有用 - 正如预期的那样,因为HashSet根本不是ArrayList的子类。泛型与此无关。除去泛型,你会看到明显的原因。

然而,

test[2] = new ArrayList<String>();
test[3] = new ArrayList<HashSet>(); 

可以很好地工作,因为这两个项都是ArrayLists。

希望这是有道理的......