1.LinkedList的底層如何實現的。
LinkedList底層數據結構是采用雙端鏈表【一個指向第一個節點的指針,一個指向最后一個節點的指針】
2.LinkedList的使用場景。
對于頻繁進行插入和刪除的情況使用LinkedList 的效率相對于ArrayList 更高
ArrayList和LinkedList的get();
ArrayList里面的數據就好像 排好隊的學生,已經為每一個學生編號[從0-n],當老師叫多少號時,該編號的學生就直接出列了;
LinkedList使用的雙向鏈表來保存數據的,每一個結點只保存了下一個結點和上一個結點的地址,沒有任何編號,當老師想叫某名學生[傳遞給LinkedList的是一個int位置]出列時,LinekdList獲取該位置時首先和整個LinkedList的size/2? 做比較,前半部分做順序遍歷,后半部分做逆序遍歷;但每次遍歷都得從第一個元素或者最后一個元素開始遍歷,即LinkedList get任意位置的元素時,都會把前面的數據給遍歷一遍【這就是使用for 循環遍歷LinkedList[數據量比較大時,>10w時]比較慢的原因】
3.LinkedList? 增、刪、查 的源碼
LinkedList add 源碼[JDK1.7.0_79]
LinkedList 調用 add() 方法時,默認是添加到鏈表的尾部;也有從鏈表頭部進行添加的方法,addFirst()
LinkedList remove? 源碼
LinkedList get 源碼
? ? ? ? LinkedList 在進行get 獲取指定位置的元素時,采用折半查找的算法,首先判斷指定位置在一半之前還是一半之后,然后再進行循環遍歷,獲取指定位置的元素,將其返回。