如何初始化Array
的{{1}}?
我尝试了这种语法,但它不起作用:
ArrayList<String>
答案 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。
希望这是有道理的......