日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中ArrayList和LinkedList的区别

發布時間:2024/4/13 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中ArrayList和LinkedList的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先來看ArrayList和LinkedList的集成類和接口的區別。// lang java public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializablepublic class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Queue<E>, Cloneable, SerializableArrayList實現了隨機訪問的接口,LinkedList實現了Quene的接口。ArrayList是基于數組實現的list,而LinkedList是基于鏈表實現的list。所以,ArrayList擁有著數組的 特性,LinkedList擁有著鏈表的特性。優缺點ArrayList 優點:適合隨機讀取的時候,讀取速度快,可以一步get(index)。 缺點:添加值很慢——一方面,添加數據在array中間的時候,需要移動后面的數;另一方面,當長度大于 初始長度的時候,每添加一個數,都會需要擴容。LinkedList:雙向鏈表 優點:添加值很快——添加在list中間也只需要更改指針;長度不固定。 實現棧和隊列方面,LinkedList要優于ArrayList。LinkedList的remove(int)和remove(Object)的方法的時間復雜度都是O(n),不是O(1).因為會有一個查找的 過程。LinkedList的remove(int)要優于remove(Object),因為remove(int)在查找的時候,會從鏈表的中間 查找,如果int比中間小,找前半部分,否則找后半部分(類似二分查找)。ArrayList的增刪比LinkedList的開銷更大,因為除了有查找的時間復雜度外,還有增刪的移動過程。使用LinkedeList<Integer>實現對鏈表的排序(sougou筆試題)//LinkedList<Integer>實現鏈表的排序 使用插入排序public LinkedList<Integer> insertSortForLinkedList(LinkedList<Integer> list){int len=list.size();for(int i=1;i<len;i++){int j=i-1;int temp=list.get(i);list.remove(i); //注意這里需要刪除元素 while(j>=0&&temp<list.get(j)){j--; }list.add(j+1,temp);}return list;}使用LinkedeList實現棧和隊列 import java.util.*;class Stack{private LinkedList list;public Stack(){list=new LinkedList();}public Object top(){ //輸出最上面的元素if(list.size()!=0){return list.getFirst();}return -1;}public void pop(){ //出棧if(list.size()!=0){list.removeFirst();}}public void push(Object v){ //入棧list.addFirst(v);}public int getLen(){return list.size();} }

ArrayList和LinkedList有什么區別?

ArrayList和LinkedList都實現了List接口,他們有以下的不同點:ArrayList是基于索引的數據接口,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。 與此對應,LinkedList是以元素列表的形式存儲它的數據,每一個元素都和它的前一個和后一個元素鏈接 在一起,在這種情況下,查找某個元素的時間復雜度是O(n)。相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的 時候,不需要像數組那樣重新計算大小或者是更新索引。LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素, 一個指向下一個元素。1) 因為 Array 是基于索引 (index) 的數據結構,它使用索引在數組中搜索和讀取數據是很快的。 Array 獲取數據的時間復雜度是 O(1), 但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。2) 相對于 ArrayList , LinkedList 插入是更快的。因為 LinkedList 不像 ArrayList 一樣,不需要 改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是 ArrayList 最壞的 一種情況,時間復雜度是 O(n) ,而 LinkedList 中插入或刪除的時間復雜度僅為 O(1) 。 ArrayList 在 插入數據時還需要更新索引(除了插入數組的尾部)。3) 類似于插入數據,刪除數據時, LinkedList 也優于 ArrayList 。4) LinkedList 需要更多的內存,因為 ArrayList 的每個索引的位置是實際的數據,而 LinkedList 中的 每個節點中存儲的是實際的數據和前后節點的位置 ( 一個 LinkedList 實例存儲了兩個值: Node<E> first 和 Node<E> last 分別表示鏈表的其實節點和尾節點,每個 Node 實例存儲了三個值: E item, Node next,Node pre) 。什么場景下更適宜使用 LinkedList,而不用ArrayList1) 你的應用不會隨機訪問數據 。因為如果你需要LinkedList中的第n個元素的時候,你需要從第一個元素 順序數到第n個數據,然后讀取數據。2) 你的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要 比ArrayList要快。換句話說,ArrayList的實現用的是數組,LinkedList是基于鏈表,ArrayList適合查找,LinkedList 適合增刪以上就是關于 ArrayList和LinkedList的差別。你需要一個不同步的基于索引的數據訪問時,請盡量 使用ArrayList。ArrayList很快,也很容易使用。但是要記得要給定一個合適的初始大小,盡可能的減少 更改數組的大小。

Java中ArrayList與LinkedList的區別

一般大家都知道ArrayList和LinkedList的區別:1. ArrayList的實現是基于數組,LinkedList的實現是基于雙向鏈表。 2. 對于隨機訪問,ArrayList優于LinkedList 3. 對于插入和刪除操作,LinkedList優于ArrayList 4. LinkedList比ArrayList更占內存,因為LinkedList的節點除了存儲數據,還存儲了兩個引用, 一個指向前一個元素,一個指向后一個元素。一.在時間復雜度上的區別假設我們有兩個很大的列表,它們里面的元素已經排好序了,這兩個列表分別是ArrayList類型和LinkedList 類型的,現在我們對這兩個列表來進行二分查找(binary search),比較它們的查找速度。對于隨機訪問,ArrayList的訪問速度更快。對于插入操作,LinkedList 的速度更快。二.在空間復雜度上的區別在LinkedList中有一個私有的內部類,定義如下: private static class Entry { Object element; Entry next; Entry previous; } LinkedList中的每一個元素中還存儲了它的前一個元素的索引和后一個元素的索引。ArrayList使用一個內置的數組來存儲元素,這個數組的起始容量是10,當數組需要增長時,新的容量按如下 公式獲得:新容量 = 舊容量*1.5 + 1,也就是說每一次容量大概會增長50% ArrayList和LinkedList的區別如下:1. ArrayList的實現是基于數組,LinkedList的實現是基于雙向鏈表。 2. 對于隨機訪問,ArrayList優于LinkedList,ArrayList可以根據下標以O(1)時間復雜度對元素進行 隨機訪問。而LinkedList的每一個元素都依靠地址指針和它后一個元素連接在一起,在這種情況下,查找 某個元素的時間復雜度是O(n) 3. 對于插入和刪除操作,LinkedList優于ArrayList,因為當元素被添加到LinkedList任意位置的 時候,不需要像ArrayList那樣重新計算大小或者是更新索引。 4. LinkedList比ArrayList更占內存,因為LinkedList的節點除了存儲數據,還存儲了兩個引用, 一個指向前一個元素,一個指向后一個元素。

?

總結

以上是生活随笔為你收集整理的java中ArrayList和LinkedList的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。