2015-08-14 90 views
2

我有一个问题需要声明一个多列数组列表。 ...缺少正确的语法或混合了我的心......如何在java中声明多重阵列列表

这工作得很好,直到这里,申报一个ArrayList与数组:

Integer[] arrArray = new Integer[] {1,2,3,4,5}; 
ArrayList<Integer> arrList = new ArrayList<Integer>(); 
arrList.addAll(Arrays.asList(arrArray)); 

也initailising和一行声明:

Integer[] arrArray = new Integer[] {1,2,3,4,5}; 
ArrayList<Integer> arrList = new ArrayList<Integer>(){{ 
addAll(Arrays.asList(arrArray));}}; 

或元素:

ArrayList<Integer> arrList = new ArrayList<Integer>(){{ 
add(1); 
add(2); 
add(3); 
}}; 

但现在我会升艾克做同样的事情,但现在多维度的ArrayList(和字符串在这种情况下):

private String[] arrFUSE={"3", "true", "0", "FUSE"}; 
private String[] arrPLACE={ "2", "true", "7", "PLACE"}; 
private ArrayList<ArrayList<String>> arrLIST = new ArrayList<ArrayList<String>>(){{ 
add(Arrays.asList(arrFUSE)); 
add(Arrays.asList(arrPLACE)); 
}}; 

的其他尝试事先

感谢。

回答

2

尝试铸造asList结果ArrayList因为asList返回类型的List

ArrayList<ArrayList<String>> arrLIST = new ArrayList<ArrayList<String>>(){{ 
    add((ArrayList<String>) Arrays.asList(arrFUSE)); 
    add((ArrayList<String>) Arrays.asList(arrPLACE)); 
    }}; 

或改变声明List

ArrayList<List<String>> arrLIST = new ArrayList<List<String>>(){{ 
    add(Arrays.asList(arrFUSE)); 
    add(Arrays.asList(arrPLACE)); 
    }}; 

既然要实现匿名内部件类右走,也没办法找出它的范围之外的类型。这就是需要铸造的地方。

+0

但通常不需要从'List'转换为'ArrayList'。 '列表 list = new ArrayList ()'是好的......为什么在这种情况下投射? –

+0

@JordiCastilla编辑答案。 –

1
String[] arrFUSE={"3", "true", "0", "FUSE"};        
String[] arrPLACE={ "2", "true", "7", "PLACE"};       
List<List<String>> arrLIST = new ArrayList<List<String>>();    
arrLIST.add(Arrays.asList(arrFUSE));         
arrLIST.add(Arrays.asList(arrPLACE)); 

不要用就行{创建ArrayList的新实例。如果你这样做,你会在它下面的行写你自己的实现ArrayList。相反,您只是想使用标准ArrayList,因此终止该行并开始新行。

我也将ArrayList<ArrayList<String>>更改为List<List<String>>,因为您希望能够将任何List放在那里,而不仅仅是ArrayLists。实际上Arrays.asList创建的不是ArrayList,所以它不适用于其他情况。