2012-01-08 142 views
1

我有9 ArrayList s,我试图将它们全部压缩到一个给定点。将对象从一个ArrayList添加到另一个

此刻dotGridArrayList S,searchXsearchY简单地指定ArrayList s到添加到neighbours矩阵。

for(int searchX = sector[0] - 1; searchX < sector[0] + 2; searchX++){ 
    for(int searchY = sector[1] - 1; searchY < sector[1] + 2; searchY++){ 
    if(searchX >= 0 && searchX < 16 && searchY >= 0 && searchY < 16){ 
     neighbours.add(dotGrid[searchX][searchY]); 
    } 
    } 
} 

从我的理解neighbours.addAll()应该工作,但事实并非如此。

我真的一直在努力寻找,但一直未能找到满意的答案。

由于事先

+3

“neighbours.addAll()应该工作,但事实并非如此。”什么不起作用?它会给出错误吗?或者产生奇怪的结果? – Howard 2012-01-08 12:48:37

+0

更完整的代码示例很有用(pastebin),值得注意的是dotGrid和neigbours的声明。此外,你不使用neighbours.add所有。 – 2012-01-08 12:51:30

回答

2

neighbours.add(dotGrid[searchX][searchY]) 

dotGrid是一个数组。通常情况下,你不能实例化一个完全合格的泛型类型的数组:

List<Double>[][] dotGrid = new List<Double>[n][]; 

将失败,一个类型的错误,所以我会认为dotGrid部分类型?

List[][] dotGrid; 

这意味着,因为你正尝试将List的所有元素添加到List<Double>addAll(dotGrid[searchX][searchY])将失败。

理想情况下,你会不会跟泛型列表混合对象数组,而是重新定义dotGrid是列表的列表清单:

List<List<List<Double>>> dotGrid; 

如果这是行不通的,你可以尝试@SuppressWarning("unchecked")到确保dotGrid有实例化后完全限定的类型,或做类似下面

@SuppressWarning("unchecked") 
List<Double> cell = (List<Double>) dotGrid[searchX][searchY]; 
neighbours.addAll(cell); 
0

List#add方法需要可加入到List的元件。因此,如果您的dotGrid是'ArrayList s'的矩阵,则尝试将ArrayList添加到List,而不是添加List的所有元素。您应该使用addAll方法,而不是因为你在你的答案被提及,但在你的代码中使用常规add方法

neighbours.addAll(dotGrid[searchX][searchY]); 

下面的代码工作得很好,说明addAll方法的使用

List<Integer> list = new ArrayList<Integer>(Arrays.asList(0, 1)); 
List<Integer> anotherList = new ArrayList<Integer>(); 
anotherList.addAll(list); 
相关问题