初始化ArrayList数组
如何初始化ArrayList
Array
?
我尝试了这种语法,但它不起作用:
ArrayList[] subsection = new ArrayList[4];
该语法适用于非genericsArrayList
。 (ideone)
但它不适用于通用ArrayList
🙁 ideone)
这段代码:
ArrayList[] subsection = new ArrayList [4];
给出编译器错误:
Main.java:8:generics数组创建 ArrayList[] subsection = new ArrayList [4];
对于通用版本,使用ArrayList
:
ArrayList> subsection = new ArrayList>();
你可以这样定义:
ArrayList[] lists = (ArrayList [])new ArrayList[10]; lists[0] = new ArrayList (); 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);
好的,评论后,我想好了…你的权利为什么不。
弄清楚了。
ArrayList[] test = new ArrayList[4]; test[3] = new ArrayList(); test[3].add("HI"); System.out.println(test[3].get(0));
虽然我会说实话,但我不确定为什么会这样。
将第一个测试项目指定为新集合后,它将仅允许arrays中的所有其他项目成为该类型。 所以你做不到
test[3] = new ArrayList(); test[2] = new HashSet ();
将generics作为类型澄清过程,您可以将类型值分配给原始类型的变量,反之亦然。 在核心generics中,程序员可以避免过多地进行类型转换,这也有助于在编译时捕获一些逻辑错误。 在基础知识中,ArrayList将始终隐式具有Object类型的项。
所以
test[i] = new ArrayList(); because test[i] has type of ArrayList.
有点
test[3] = new ArrayList(); test[2] = new HashSet ();
没有工作 – 正如预期的那样,因为HashSet根本不是ArrayList的子类。 generics与此无关。 除去generics,你会看到明显的原因。
然而,
test[2] = new ArrayList(); test[3] = new ArrayList();
将很好地工作,因为这两个项都是ArrayLists。
希望这有道理……