android list 比较,LinkedList 和 ArrayList 的区别

## 區別
* ArrayList 動態數組
* LinkedList 雙向鏈表,它同樣可以被當作棧、隊列或雙端隊列來使用
* 對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部數組中增加一項,指向所添加的元素,偶爾可能會導致對數組重新進行分配;而對LinkedList而言,這個開銷是統一的,分配一個內部Entry對象。
* 在ArrayList的中間插入或刪除一個元素意味著這個列表中剩余的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。
* LinkedList不支持高效的隨機元素訪問。
* ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間
## 總結:
LinkedList 在查找指定位置元素的時候,會先根據傳入的 index 和當前 size 的一半作比較。如果小于當前的一半,就從頭節點遍歷,如果大于當前size 的一半,從尾節點開始遍歷。
實現如下:
~~~
Node node(int index) {
// assert isElementIndex(index);
// 如果小于當前 size 的一半,從頭節點開始遍歷
if (index < (size >> 1)) {
Node x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
// 這里是大于當前 size 的一半,從尾節點開始遍歷
Node x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
~~~
可以這樣說:當操作是在一列數據的**后面添加數據而不是在前面或中間**,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數據的**前面或中間添加或刪除數據,**并且按照順序訪問其中的元素時,就應該使用LinkedList了。
總結
以上是生活随笔為你收集整理的android list 比较,LinkedList 和 ArrayList 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cuda8.0.44linux.run,
- 下一篇: android 开发常见问题,Andro