簡體   English   中英

ArrayLists的ArrayList,如何使用內部列表?

[英]ArrayList of ArrayLists, how to use inner lists?

我有一個要動態添加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 );
 }

如何告訴編譯器list中的項目將是ArrayList類型?

請記住,我是Java的新手。 如果這是一個愚蠢的問題,我表示歉意。

您可以聲明一個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());
}

請記住,始終編程為接口,而不是直接的類實現

您可以像處理其他任何類型的對象一樣進行操作。 您將其投放:

((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 );

這是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 );
 }
List<List<String>> list = new ArrayList<>();
List<ArrayList<Object>> list = new ArrayList<>();

在Java 7中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM