![](/img/trans.png)
[英]Sorting an ArrayList of ArrayLists of Integers in which inner Lists are of varying lengths
[英]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.