初始化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。

希望这有道理……