arraylist隨機訪問
是的,數列結構,ArrayList的結構就適合隨機訪問。[]數組、Vector、ArrayList結構在隨機訪問、遍歷、獲得大小方面都是O(1)的性能。
沒有證據說明ArrayList比數組和Vector就性能更好。但ArrayList是非線程安全的。
(另外,如果問「較好」,就應該有比較,沒有指明和什麼比較?問題不嚴謹。)
⑵ java中ArrayList和LinkedList有什麼區別,分別怎麼使用呢
ArrayList和LinkedList都實現了List介面,ArrayList的實現用的是數組,LinkedList是基於鏈表,ArrayList適合查找,LinkedList適合增刪。
ArrayList與LinkList兩者的區別:
ArrayList是基於索引的數據介面,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。
相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
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,而不用ArrayList
1) 你的應用不會隨機訪問數據 。因為如果你需要LinkedList中的第n個元素的時候,你需要從第一個元素順序數到第n個數據,然後讀取數據。
2) 你的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。
⑶ Java中為什麼說ArrayList在進行隨機訪問和遍歷元素時,它能提供更好的性能
很明顯,ArrayList對象在底層以數組的形式存儲元素.
數組:便於查詢,不利於插入、刪除、修改,,
便於查詢..........至於為什麼便於查詢,主要是因為數組是一排有序的、並有下標關聯的元素的集合..
⑷ 關於ArrayList與LinkedList問題
對於處理一列數據項,Java 提供了兩個類ArrayList 和LinkedList ,ArrayList 的內部實現是基於內部數組Object[] ,從概念上講,它更像數組,但LinkedList 的內部實現是基於一組連接的記錄,所以,它更像一個鏈表結構,它們在性能上有很大的差別。
ArrayList和LinkedList都實現了List介面,ArrayList的實現用的是數組,LinkedList是基於鏈表,ArrayList適合查找,LinkedList適合增刪。
ArrayList與LinkList兩者的區別:
ArrayList是基於索引的數據介面,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。
相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
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,而不用ArrayList
1) 你的應用不會隨機訪問數據 。因為如果你需要LinkedList中的第n個元素的時候,你需要從第一個元素順序數到第n個數據,然後讀取數據。
2) 你的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。
⑸ java arraylist是有序的嗎
是有序的。
比如:List<Integer> list=new ArrayList<Integer>();
list.get(0)
一個list,第一個放進去是1,第二個放進去是2:
List<Integer> numList=new ArrayList<>();
numList.add(1);
numList.add(2);
當取第一個時numList.get(0);(下標從0開始)
列印它出來還是:1

(5)arraylist隨機訪問擴展閱讀:
LinkedList :對順序訪問進行了優化,向List中間插入與刪除的開銷並不大。隨機訪問則相對較慢。(使用ArrayList代替)還具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何介面或基類中定義過)使得LinkedList可以當作堆棧、隊列和雙向隊列使用。
⑹ ArrayList 和LinkedList各自的特點是什麼
ArrayList
:
其實是包裝了一個數組
,當實例化一個ArrayList時,一個數組也被實例化,當向ArrayList中添加對象是,數組的大小也相應的改變。這樣就帶來以下有缺點:
快速隨即訪問
你可以隨即訪問每個元素而不用考慮性能問題,通過調用get(i)方法來訪問下標為i的
數組元素
。
向其中添加對象速度慢
當你創建數組是並不能確定其容量,所以當改變這個數組時就必須在內存中做很多事情。
操作其中對象的速度慢
當你要想數組中任意兩個元素中間添加對象時,數組需要移動所有後面的對象。
LinkedList:
LinkedList是通過節點直接彼此連接來實現的。每一個節點都包含前一個節點的引用,後一個節點的引用和節點存儲的值。當一個新節點插入時,只需要修改其中保持先後關系的節點的引用即可,當刪除記錄時也一樣。這樣就帶來以下有缺點:
操作其中對象的速度快
只需要改變連接,新的節點可以在內存中的任何地方。不能隨即訪問,
雖然存在方法,但是這個方法是通過遍歷接點來定位的所以速度慢。
(6)arraylist隨機訪問擴展閱讀:
ArrayList就是
動態數組
,用MSDN中的說法,就是Array的
復雜版本
,它提供了動態的增加和減少元素,實現了ICollection和IList介面,靈活的設置數組的大小等好處。
List
介面的大小可變數組的實現,位於API文檔的java.util.ArrayList
。實現了所有可選列表操作,並允許包括
null
在內的所有元素。除了實現
List
介面外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。
參考資料:搜狗網路-arraylist
⑺ LinkedList和ArrayList的區別
ArrayList
ArrayList是一個動態數組,也是我們最常用的集合。
它允許任何符合規則的元素插入甚至包括null。每一個ArrayList都有一個初始容量(10),該容量代表了數組的大小。隨著容器中的元素不斷增加,容器的大小也會隨著增加。
在每次向容器中增加元素的同時都會進行容量檢查,當快溢出時,就會進行擴容操作。
所以如果我們明確所插入元素的多少,最好指定一個初始容量值,避免過多的進行擴容操作而浪費時間、效率。size、isEmpty、get、set、iterator 和 listIterator 操作都以固定時間運行。
add 操作以分攤的固定時間運行,也就是說,添加 n 個元素需要 O(n) 時間(由於要考慮到擴容,所以這不只是添加元素會帶來分攤固定時間開銷那樣簡單)。
ArrayList擅長於隨機訪問。同時ArrayList是非同步的。
LinkedList
同樣實現List介面的LinkedList與ArrayList不同,ArrayList是一個動態數組,而LinkedList是一個雙向鏈表。
所以它除了有ArrayList的基本操作方法外還額外提供了get,remove,insert方法在LinkedList的首部或尾部。由於實現的方式不同,LinkedList不能隨機訪問,它所有的操作都是要按照雙重鏈表的需要執行。
在列表中索引的操作將從開頭或結尾遍歷列表(從靠近指定索引的一端)。
這樣做的好處就是可以通過較低的代價在List中進行插入和刪除操作。與ArrayList一樣,LinkedList也是非同步的。
如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:
List list
= Collections.synchronizedList(new LinkedList(...));
綜述:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優於ArrayList.
因為ArrayList每插入一條數據,要移動插入點及之後的所有數據。
⑻ java ArrayList 隨機訪問、遍歷 性能
說ArrayList在進行隨機訪問和遍歷元素時,能提供較好的性能應該是跟LinkList對比的吧,插入刪除操作多的話用LinkList比較好,《Java編程思想》是這樣說的
