ArrayList
- 默認(rèn)構(gòu)造一個(gè)空的數(shù)組
- 默認(rèn)大小為DEFAULT_CAPACITY(10)永罚,在首次調(diào)用add方法時(shí)進(jìn)行初始化
- 自動(dòng)擴(kuò)展方法:當(dāng)數(shù)組滿時(shí)椰拒,進(jìn)行1.5倍擴(kuò)容
- 特殊方法說(shuō)明
- add(index,element):將element添加到index位置,原來(lái)index元素依次進(jìn)行后移動(dòng)溶诞,元素size++
- modCount 記錄了隊(duì)列的變化次數(shù)(具體指List大小發(fā)生變化的次數(shù)),list在遍歷之前記錄下當(dāng)前mod,遍歷過(guò)程隨時(shí)檢查mod是否變化辛慰,當(dāng)發(fā)生變化是將拋出異常
- 通過(guò)迭代器的方式進(jìn)行List的遍歷,可以進(jìn)行List的mode追蹤
- 內(nèi)部迭代器
- Itr
- 通過(guò)iteator()方法獲取
- 由第一個(gè)元素開(kāi)始向后遍歷
- ListItr
- 通過(guò)listIterator(index)進(jìn)行獲取
- 隨機(jī)指定位置的迭代器訪問(wèn)干像,可以向前也可以向后
- 迭代器可以獲取當(dāng)前位置帅腌,前置元素和后置元素
- Spliterator 為并行遍歷數(shù)據(jù)設(shè)計(jì)的迭代器
- Java8新增接口
- trySplit嘗試對(duì)現(xiàn)在的list進(jìn)行1/2分割,如果無(wú)法分割將返回null
- tryAdvance 處理所有元素麻汰,當(dāng)沒(méi)有元素處理時(shí)速客,返回false
- Itr
- 元素的移除
- remove(index) 一次的元素移動(dòng)(拷貝index之后的數(shù)據(jù),數(shù)組并不會(huì)進(jìn)行回收,隊(duì)形空間將被回收)
- remove(Object) 刪除第一個(gè)相等的對(duì)象,一次的數(shù)據(jù)移動(dòng)
- removeAll 刪除多個(gè)元素多個(gè)元素五鲫,相同的也將被刪除溺职,可能有一次的數(shù)組拷貝動(dòng)作(發(fā)生異常的情形下)
- removeIf
- trimToSize List
- retainAll 取集合之間交集
- SubList List的一個(gè)子集,和List共同使用數(shù)據(jù)臣镣,subList的變更將影響list的數(shù)據(jù)辅愿;list變更將導(dǎo)致subList無(wú)法正常使用(拋出ConcurrentModificationException異常)
LinkedList
- 其實(shí)現(xiàn)是一個(gè)雙向鏈表
- 內(nèi)部數(shù)據(jù)結(jié)構(gòu)
- Node
- 保存節(jié)點(diǎn)數(shù)據(jù)
- 保存一個(gè)向前指針和向后指針
- ListItr 順序迭代器
- DescendingIterator 倒序迭代器
- Node
ArrayList VS LinkedList
- 內(nèi)部事項(xiàng)方式的差異
- 以數(shù)組為基礎(chǔ)的ArrayList
- 以鏈表為節(jié)點(diǎn)的LinkedList
- 隨機(jī)訪問(wèn)性能對(duì)比: ArrayList優(yōu)于LinkedList
- 節(jié)點(diǎn)的插入和刪除
- ArrayList需要進(jìn)行數(shù)組的自動(dòng)擴(kuò)展和數(shù)組的拷貝
- LinkedList 對(duì)于內(nèi)存使用更加充分
- 通過(guò)modCount 對(duì)List的追蹤,對(duì)List進(jìn)行非讀操作時(shí)忆某,mod將進(jìn)行變化
- 通過(guò)迭代器進(jìn)行訪問(wèn)点待,可是追蹤到List是否有其他線程進(jìn)行操作