2016-03-15 140 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类本身的实现,那么它可能是空的,但你不必担心 –