在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ ArrayList中關(guān)于clear()

ArrayList中關(guān)于clear()

今天看ArrayList源碼,發(fā)現(xiàn)clear方法中的清除過(guò)程如下

`public void clear() {
    modCount++;
    // clear to let GC do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}`

不明白為什么需要遍歷elementData中的每個(gè)元素并賦值為null,不能是直接elementData=null嗎?

回答
編輯回答
詆毀你

clear方法的作用是清空集合中所有的元素,意思是還可以繼續(xù)使用,不過(guò)里面沒(méi)有數(shù)據(jù)了,你讓elementData=null之后后面沒(méi)有辦法再繼續(xù)操作了,會(huì)出現(xiàn)空指針。
遍歷設(shè)置為空是為了讓GC快點(diǎn)進(jìn)行垃圾回收。

2017年9月2日 05:06
編輯回答
舊螢火

咋一看起來(lái),好像下面的方法更簡(jiǎn)單:

    modCount++;
    elementData = EMPTY_ELEMENTDATA;
    size = 0;

但是有一個(gè)原因讓這種做法不可行:elementData不是私有的!

在設(shè)計(jì)上,為了效率,elementData是包可見(jiàn)的,會(huì)被其他類(主要是ArrayList的內(nèi)部迭代器類)直接引用。如果采用上面的做法,就可能會(huì)導(dǎo)致迭代器與數(shù)據(jù)不一致問(wèn)題。

2018年4月23日 17:57
編輯回答
若相惜

遍歷每個(gè)元素賦值為null,說(shuō)明這個(gè)數(shù)組的長(zhǎng)度為0,elementData.length == 0. 但是如果直接 elementData=null,在進(jìn)行條件判斷時(shí)候 ,可能會(huì)出現(xiàn)空指針異常

2018年8月28日 10:29