2016-03-15 142 views
0

如果我初始化包含LatLng對象的ArrayList的ArrayList,LatLngs的ArrayLists是否設置爲null或空?我想問的原因是因爲當我檢查確保第一個ArrayList爲空時,我得到一個IndexOutofBoundsException(size = 0,index = 0)。這是否意味着當我第一次初始化對象時,所有的對象都被設置爲空而不爲空?所以我不必每次都初始化一個新的LatLng對象,也不需要初始化每個嵌套的ArrayList?初始化嵌套對象java

我初始化的對象:

public ArrayList<ArrayList<LatLng>> badSpots = new ArrayList<>(); 
int badArrayNum = 0; 

當我得到異常:

if(badSpots.get(badArrayNum)!=null){ 
         badSpots.get(badArrayNum).add(badArrayNum,new LatLng(newLat,newLon)); 
        } 
+1

初始化只有一個級別。在你的例子中,你創建一個新的ArrayList,你可以在其中愉快地使用LatLng對象的ArrayLists。介意:你只創建了一個**空**列表;沒有其他的。 – GhostCat

+0

@Jägermeister那麼如果我的badSpots不是空的,比如索引0處有一個數組列表,但索引1處不是數組索引1處的數組列表是空還是空? –

+0

只需閱讀集合的javadoc;答案是:這取決於。如果你只叫「添加」一次;那麼大小是1;並且只能訪問索引0。如果你兩次調用「add」,那麼size是2;並在索引1 ...你有什麼你「添加」在那裏。 – GhostCat

回答

0

你數組越界的原因錯誤是因爲你還沒有該索引處存儲的東西,主要是因爲大小爲0,因爲你沒有插入任何東西到ArrayList中。因此,在執行get調用之前,請檢查ArrayList的大小以防止發生IndexOutOfBoundException。因此,在做badSpots.get(0)之前,請檢查badSpots.size()>0!badSports.isEmpty()

所以你還得初始化你存儲的對象。不,你的LatLng對象不會被初始化。通用只能確保Type LatLng對象存儲在ArrayList中。

+0

那麼如果我的badSpots不是空的,比如索引0處有一個數組列表,但是索引1處不是數組索引1處的數組列表null或空? –

+0

如果badSpots的大小爲1,'badSpots.get(1)'將拋出一個異常,因爲該索引不存在。如果你正在談論ArrayList類本身的實現,那麼它可能是空的,但你不必擔心 –