一、AbstractCollection 提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator 二、fail-fast策略 該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想 ...
一、AbstractCollection
提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator二、fail-fast策略
該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想有異曲同工之處 具體在集合中的實現: 定義一個全局變數modCount,表示集合被修改的次數 每次進行動態操作的時候,modCount++ 在Iterator中定義一個全局變數expectedModCount, 每次操作Iterator的時候都會比較modCount和expectedModCount,相等則認為這個集合沒有被併發修改,否則會拋出ConcurrentModificationException 所以只要有modCount這個變數的,都是線程不安全的,這種集合最好使用迭代器,因為直接操作不會檢查集合有沒有被併發修改 使用volatile修飾modCount 被volatile修飾的變數,程式中的每次引用,處理器都會從記憶體(共用記憶體)中去讀值,而不是從寄存器(線程獨有記憶體)中獲取 這使得fail-fast策略更可靠三、AbstractList
提供了順序表的最大實現 該類實現了迭代器 繼承該類,需要實現get方法,因為迭代器的next是調用了get四、ArrayList
1.初始容量為10
構造器(集合)和addAll,是深拷貝,因為調的是AbstractCollection.toArray()---->Arrays.copyOf()------>System.arraycopy()2.多用會用trimToSize
因為順序表一建立的時候,就會創建一個初始大小的數組,這樣就會有空餘的位置,調用這個方法可以把多餘的位置清理,節約空間 實際長度是存儲數組的length,不是全局變數size,size意味著有多個個元素是有數據的3.擴展容量
預設是增大一半的空間,要考慮int溢出(溢出<0),以及虛擬機的最大記憶體 必用ensureCapacity(int minSize),需要增大容量的時候,都要調用 都要確認這個容量是否支持,不支持則會擴展容量 防止數組越界4.toArray,clone都是深度拷貝
5.維護的數組是沒有泛型的,當需要獲取元素的時候,才去轉型
6.對於動態操作
並沒有像通常數據結構的書那樣子,要移動操作元素後續的節點,而是直接拷貝一份7.養成好習慣
動態操作了之後,不單單隻是移動指針,要將不存在的元素位置設置為null,目的是為了讓垃圾收集器工作8.提供一些安全性低,但是快速的private方法
比如remove(Obj),獲取下標了之後,就可以調用一個fastRemove(index),不需要二次比較值9.subList(from,to)
返回的是該集合的視圖,視圖是淺拷貝,會直接操作該集合查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/