Java ArrayList of ArrayList,如何使用内部列表?

Java ArrayList of ArrayList,如何使用内部列表?,java,list,dynamic,arraylist,Java,List,Dynamic,Arraylist,我有一个ArrayList对象,我想动态地向其中添加ArrayList 但是,由于编译器在运行添加外部ArrayList的循环之前不知道哪些对象将位于外部ArrayList中,因此我不能像通常那样使用内部ArrayList 我的代码看起来有点像这样: ArrayList list = new ArrayList(); for(int i=8;i>0;i--) { list.add(i, new ArrayList()); } for(int i=8;i>0;i-

我有一个ArrayList对象,我想动态地向其中添加ArrayList

但是,由于编译器在运行添加外部ArrayList的循环之前不知道哪些对象将位于外部ArrayList中,因此我不能像通常那样使用内部ArrayList

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

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 );
 }
如何告诉编译器
列表中的项将是
ArrayList
类型


请记住,我对Java是完全陌生的。如果这是一个愚蠢的问题,我道歉

你可以声明一个
列表
,而
无论什么
都可以是另一个支持泛型的接口/类,比如
列表
,所以把所有这些放在一起,你可以声明一个
列表
,编译器会很高兴的。根据上述代码:

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());
}
List tileRows=new ArrayList();
对于(int i=8;i>0;i--){
添加(i,newarraylist());
}
对于(int i=8;i>0;i--){
//在这里,编译器知道tileRows.get(i)是一个列表
tileRows.get(i).add(“foo”);
//取消注释下面的行,您将得到一个编译器错误
//tileRows.get(i).add(newobject());
}

请记住始终。

您可以声明一个
列表
,而
无论什么
都可以是另一个支持泛型的接口/类,如
列表
,因此将所有这些放在一起,您可以声明一个
列表
,编译器会很高兴。根据上述代码:

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());
}
List tileRows=new ArrayList();
对于(int i=8;i>0;i--){
添加(i,newarraylist());
}
对于(int i=8;i>0;i--){
//在这里,编译器知道tileRows.get(i)是一个列表
tileRows.get(i).add(“foo”);
//取消注释下面的行,您将得到一个编译器错误
//tileRows.get(i).add(newobject());
}
请记住始终使用。

List List=new ArrayList();
List List=new ArrayList();
List List=new ArrayList();
在Java 7中

List List=new ArrayList();

在Java 7中,您可以使用与处理任何其他类型对象相同的方法来执行此操作。你投的是:

((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 );
//这告诉编译器您的ArrayList将包含ArrayList
ArrayList=新建ArrayList();
//现在编译器知道get()函数返回ArrayList,因此不必强制转换它
tileRows.get(i).add(//添加其他内容);

您可以像处理任何其他类型的对象一样进行操作。你投的是:

((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 );
//这告诉编译器您的ArrayList将包含ArrayList
ArrayList=新建ArrayList();
//现在编译器知道get()函数返回ArrayList,因此不必强制转换它
tileRows.get(i).add(//添加其他内容);

这是Java通用语言,正确的用法如下:

 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 );
 }
ArrayList list=new ArrayList();
对于(int i=8;i>0;i--)
{
添加(i,newarraylist());
}
对于(int i=8;i>0;i--)
{         
tileRows.get(i).add(//添加其他内容);
}

这是Java通用语言,正确的用法如下:

 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 );
 }
ArrayList list=new ArrayList();
对于(int i=8;i>0;i--)
{
添加(i,newarraylist());
}
对于(int i=8;i>0;i--)
{         
tileRows.get(i).add(//添加其他内容);
}

谢谢,这正是我想要的。我怀疑事情会像这样简单。谢谢你,这正是我想要的。我怀疑会是这样简单的事情。