ArrayList的ArrayList,如何使用内部列表?

时间:2014-02-24 15:31:21

标签: java list dynamic arraylist

我有一个ArrayList对象,我想动态添加ArrayLists。

但是,由于编译器在添加循环的循环之前不知道外部ArrayList中将包含哪些对象,因此我无法像往常那样使用内部ArrayLists。

我的代码看起来有点像这样:

ArrayList list = new ArrayList();

 for(int i=8;i>0;i--)
 {
     list.add(i, new ArrayList());
 }

 for(int i=8;i>0;i--)
 {         
    tileRows.get(i).add( //add other stuff );
 }

如何告诉编译器list中的项目将属于ArrayList类型?

请记住,我是Java的新手。如果这是一个愚蠢的问题,我道歉。

5 个答案:

答案 0 :(得分:2)

您可以声明List<Whatever>,而Whatever可以是支持泛型的其他界面/类,例如List<String>,因此将所有这些放在一起就可以声明List<List<String>>并且编译器会很高兴。根据您的上述代码:

List<List<String>> tileRows= new ArrayList<List<String>>();
for(int i=8;i>0;i--) {
    list.add(i, new ArrayList<String>());
}

for(int i=8;i>0;i--) {
    //here the compiler knows tileRows.get(i) is a List<String>
    tileRows.get(i).add("foo");
    //uncomment the below line and you will get a compiler error
    //tileRows.get(i).add(new Object());
}

请记住始终program to an interface, not to a direct class implementation

答案 1 :(得分:2)

您可以像对待任何其他类型的对象一样执行此操作。你投了它:

((ArrayList)tileRows.get(i)).add( //add other stuff );

或者更好的是,你使用泛型,所以你不必做那个演员:

//this tells the compiler that your ArrayList will contain ArrayLists
ArrayList<ArrayList<Whatever>> list = new ArrayList()<>;
//now the compiler knows the get() function returns an ArrayList, so you don't have to cast it
tileRows.get(i).add( //add other stuff );

答案 2 :(得分:2)

这是Java Generic,正确使用是这样的:

 ArrayList<ArrayList> list = new ArrayList<ArrayList>();

 for(int i=8;i>0;i--)
 {
     list.add(i, new ArrayList());
 }

 for(int i=8;i>0;i--)
 {         
    tileRows.get(i).add( //add other stuff );
 }

答案 3 :(得分:1)

List<List<String>> list = new ArrayList<>();

答案 4 :(得分:1)

List<ArrayList<Object>> list = new ArrayList<>();
Java 7中的