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

鍍金池/ 問(wèn)答/Java/ Java ArrayList源碼為什么2個(gè)越界檢查條件不一樣?

Java ArrayList源碼為什么2個(gè)越界檢查條件不一樣?

如圖,為何一個(gè)index可以等于size一個(gè)不可以?為何一個(gè)要判斷<0一個(gè)不用?
clipboard.png

rangeCheck出現(xiàn)的地方
clipboard.png

rangeCheckForAdd出現(xiàn)的地方
clipboard.png
clipboard.png

回答
編輯回答
兔寶寶

rangeCheckForAdd當(dāng)index==size時(shí),其實(shí)就相當(dāng)于在列表尾添加元素,所以rangeCheckForAddindex可以等于size
例如:
使用add(size,data),就相當(dāng)于add(data)

2017年9月17日 04:01
編輯回答
柚稚

rangeCheckForAdd是添加集合時(shí)做的判斷,很明顯,添加時(shí)index是不能超出集合的范圍,同時(shí)他的下標(biāo)也不能為負(fù)數(shù),rangeCheck是判斷當(dāng)前集合index是否超出范圍,此時(shí)這個(gè)集合是存在的,所有他不需要去判斷他的index小于零。只能是判斷是否大于當(dāng)前index

2017年7月27日 23:34
編輯回答
野橘

rangeCheck方法是提供給get,remove,set之類(lèi)的方法檢查的,是給已經(jīng)存在元素的集合操作的,范圍0至size-1,這個(gè)方法把檢查負(fù)責(zé)的職責(zé)交給了數(shù)組的訪問(wèn),像get(-1)時(shí)會(huì)報(bào)異常ArrayIndexOutOfBoundsException。
rangeCheckForAdd方法的源碼注釋說(shuō)A version of rangeCheck used by add and addAll。
添加元素的位置可以是0到size-1,做了負(fù)值的檢查。暫時(shí)看出來(lái)這些。

2017年9月9日 08:59
編輯回答
孤星

一個(gè)是獲取元素,下標(biāo)不能大于數(shù)組長(zhǎng)度
另外一個(gè)是添加,添加方法的范圍就是[0,size)

2018年6月3日 00:57