1. 程式人生 > >比較List和ArrayList的效能及ArrayList和LinkedList優缺點

比較List和ArrayList的效能及ArrayList和LinkedList優缺點

List和ArrayList的效能比較



在使用ArrayList這樣的非泛型集合的過程中,要進行裝箱和拆箱操作,會有比較大的效能損失,而使用泛型集合就沒有這樣的問題。List是泛型,而ArrayList是非泛型。存資料島ArrayList都需要專程object,讀取又要轉換成相應的資料型別,List則不需要。


//用來記錄開始和結束的時間
 DateTime startTime = new DateTime();
 DateTime endTime = new DateTime();
//定義集合型別ArrayList的一個例項
 ArrayList list = new ArrayList();
//取得當前時間
 startTime = DateTime.Now;
//★★★★★★★★①使用ArrayList類★★★★★★★★
 //ArrayList的add方法的引數是Object型,
 //當我們把int型作為引數傳入的時候需要做裝箱操作
 //裝箱操作將值型別轉化為Object型別
 for (int i = 0; i < 1000000; i++)
 {
 list.Add(i);
 }
int iCount = 0;
 //當我們使用int型的時候需要做拆箱操作操作
 //拆箱操作將應用型別轉化為Object型別,拆箱過程要做大量的工作
 foreach (int i in list)
 {
 iCount += 1;
 }
Console.WriteLine("使用ArrayList的結果 : {0}", iCount.ToString());
//取得結束時間並

計算差值
 endTime = DateTime.Now;
 TimeSpan ts = endTime - startTime;
Console.WriteLine("使用ArrayList的耗時 :" + ts.TotalMilliseconds);
//★★★★★★★★②使用泛型類★★★★★★★★
 //使用List的泛型定義List<T>,int型別在編譯器動態生成的類中本替換為int型
 //執行過程中不再執行裝箱拆箱操作
 List<int> list2 = new List<int>();
startTime = DateTime.Now;
for (int i = 0; i < 1000000; i++)
 {
 list2.Add(i);
 }
iCount = 0;
 foreach (int i in list2)
 {
 iCount += 1;
 }
Console.WriteLine("使用泛型的結果 : {0}", iCount.ToString());
endTime = DateTime.Now;
 ts = endTime - startTime;
Console.WriteLine("使用泛型的耗時 :" + ts.TotalMilliseconds);
//顯示三次結果如下
/* 第一次
 * 使用ArrayList的耗時 :92
 * 使用泛型的耗時 :25
 *
 * 第二次
 * 使用ArrayList的耗時 :96
 * 使用泛型的耗時 :22
 *
 * 第三次
 * 使用ArrayList的耗時 :90
 * 使用泛型的耗時 :22
 *
 * 由此可以明顯看出兩者的差別
 * 這裡僅僅是時間上的,並不包括對記憶體消耗的統計
 *
 * ※但是也要注意到差別的單位是毫秒,
 * 我這裡只想說明用泛型是有好處的,
 * 但也不可過分追求程式的孰優孰劣,
 * 總之要把握好這個度,適合自己的才是最好的
 * O(∩_∩)O~
 */
Console.Read();

ArrayList和LinkedList優缺點



java程式設計中我們用最多的幾個類可以就是String,ArrayList,HashMap了.特別是ArrayList我們幾乎無人不知,甚至有亂用的嫌疑了我們來看看ArrayList和LinkedList的區別.故名思意ArrayList是陣列表,LinkedList是連結表.ArrayList的所有資料是在同一個地址上,而LinkedList的每個資料都擁有自己的地址.

我們來比較一下常用的資料的插入,資料的刪除,資料的更新,資料查詢.

資料插入 :比如在i節點插入一個新資料

   ArrayList:迴圈到i節點,插入一個新資料,然後把i節點後面的所有的資料的index加1. ->操作多

   LinkedList:迴圈到i節點,把前一個節點的後續連結到新資料,然後把新資料鏈接到後一個數據就可以了.  ->操作少

   結論:平均效率LinkedList要好.

資料刪除 :比如刪除i節點資料

   ArrayList:迴圈到i節點,然後把i節點後面的所有的資料的index減1. ->操作多

   LinkedList:迴圈到i節點,把前一個節點的後續連結到i節點的後一個數據就可以了.  ->操作少

   結論:平均效率LinkedList要好.

資料查詢 :比如查詢i節點資料

   ArrayList:迴圈到i節點. ->操作少

   LinkedList:迴圈到i節點.  ->操作少,但由於每個資料的地址不一樣,查詢比如 ArrayList慢.

   結論:平均效率 ArrayList要好.

資料更新 :比如更新i節點資料

   ArrayList:迴圈到i節點,把資料更新. ->操作少

   LinkedList:迴圈到i節點,把前資料更新.  ->操作少,但由於查詢速度沒有 ArrayList好,所有效率沒有 ArrayList好.

   結論:平均效率ArrayList要好.

這樣我們就可以看到各有優點.

如果查詢操作較多ArrayList的效果更好.如果刪除,插入較多LinkedList的效果較好.具體怎麼用還看具體的需求.

以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋int , 資料 , arraylist , 效率 , 型別 時間 arraylist linkedlist、linkedarraylist、linkedlist、java linkedlist、linkedlist執行緒安全,以便於您獲取更多的相關知識。

相關推薦

比較ListArrayList效能ArrayListLinkedList優缺點

List和ArrayList的效能比較 在使用ArrayList這樣的非泛型集合的過程中,要進行裝箱和拆箱操作,會有比較大的效能損失,而使用泛型集合就沒有這樣的問題。List是泛型,而ArrayList是非泛型。存資料島ArrayList都需要專程object,讀取又要轉換成相應的資料型別,List則不需要。

Java學習之為什麼說LinkedList的插入刪除效能ArrayList好,而ArrayList的查詢更好?

ArrayList類似於陣列,是按順序儲存在記憶體的。 LinkedList類似與連結串列,是沒有順序的,是通過指標連結了每個元素。 因為LinkedList是無序儲存的,所以插入隨便一個地方都可以,只要指標指向了就行。 而ArrayList是有序的,插入要遍歷到你要插入的

第六課 相對絕對路徑、創建刪除目錄cdrm命令的使用

20180326一、相對路徑和絕對路徑 pwd命令: 打印查看當前路徑 絕對目錄就是以/(根)開頭的,相對路徑就是相對當前目錄,不是以/(根)開頭的。 二、cd命令cd 進入到一個目錄cd - 進入上次的目錄(相當於遙控器上的相互交替的按鍵)cd ~ 回到用戶家目錄cd .. 進入到上一級目錄 三、創

tcp網路程式設計客戶端服務端listentcp允許最大連線數

tcp網路程式設計 tcp網路程式設計步驟: 由於tcp傳輸特點是可靠有連線,那麼就有 1.客戶端向服務端傳送連線請求(SYN), 2.服務端接受請求並向客戶端傳送(SYN+ACK); 3.客戶端向服務端回覆ACK表明他知道服務端同意連線。 以上三個步驟就是三次

List list = new ArrayList();ArrayList list=new ArrayList();用法區別(轉載)

List是一個介面,而ArrayList 是一個類。 ArrayList 繼承並實現了List。        List list = new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List

Java 集合系列08之 List總結(LinkedList, ArrayList等使用場景效能分析)

1 import java.util.*; 2 import java.lang.Class; 3 4 /* 5 * @desc 對比ArrayList和LinkedList的插入、隨機讀取效率、刪除的效率 6 * 7 * @author skywang 8 */ 9 public

java 集合ArrayList實現類List介面常用方法LinkedListVector的特點

1.集合結構 Collection介面 List介面:儲存有序的,可重複的元素 ArrayList(主要的實現類)、LinkedList、Vector Set介面:儲存無序的,不可重複的元素

陣列ArrayList的區別ArrayList的常用API的用法

1.陣列 陣列在記憶體中是連續儲存的,優點是它的索引速度非常快,而且賦值與修改元素較快,不足是在陣列中插入資料比較麻煩,同時宣告陣列時應知名陣列的長度,若陣列長度過長會造成記憶體浪費,陣列長度過短,會造成資料溢位的錯誤。 1.1 例項: string[] s=new string

java的知識點23——泛型Generics、Collection介面、List特點常用方法、 ArrayList特點底層實現

泛型Generics 一般通過“容器”來容納和管理資料。程式中的“容器”就是用來容納和管理資料。 陣列就是一種容器,可以在其中放置物件或基本型別資料。 陣列的優勢:是一種簡單的線性序列,可以快速地訪問陣列元素,效率高。如果從效率和型別檢查的角度講,陣列是最好的。 陣列的劣勢:不靈活。

Java 集合系列08之 List總結(LinkedList, ArrayList等使用場景性能分

index索引 不同之處 知識點 給未來的自己 zab 默認 性能調優 程序 代碼 第1部分 List概括 先回顧一下List的框架圖 (01) List 是一個接口,它繼承於Collection的接口。它代表著有序的隊列。 (02) AbstractList 是一個抽象類

Java——Link接口(ArrayList,LinkList)Set接口(HashSet)

ott 機制 demo 不同的 inside 對象的比較 註意 enter bound List接口 List接口是Collection接口的子接口,List接口中的抽象方法,有一部分方法和他的父接口Collection是一樣,List接口的自己特有的方法, 帶有索引的功能

java List介面 IteratorListIterator的區別

List介面是Collection介面的一個子介面,繼承了Colelction中的方法,同時還有自己的方法 主要有以下幾種 1.void add(int index,object element):在指定索引位置新增元素,新增在中間位置時,後面的元素依次往後移置,新增的位置可以在最後一位,但

JuliaJava效能比較

1、介紹 Julia效能號稱可以趕得上c/c++,我很好奇Julia的執行速度,因為我一直用的是Java,所以就想把Julia和Java做一下簡單的比較。這次比較一下Julia和Java做一億次加法運算的速度。 2、Julia不做優化和Java比較 首先我寫的Jul

【宇潤日常瘋測-005】PHP 中的 clone new 效能比較

clone和new本不應該放在一起比較,它們的作用是不同的。但可能有一些場景下,可以用clone也可以用new,那麼這時候我們選哪個呢? 我編寫了兩個測試,第一個是宣告一個空類,第二個是帶構造方法、屬性的類。另外,我還加入了 PHP 序列化的測試。 國際慣例,直接上程式碼,一目瞭然。 程式碼 <?php

java:集合框架(TreeSet保證元素唯一比較器排序的原理程式碼實現)

* A:案例演示     * TreeSet保證元素唯一和比較器排序的原理及程式碼實現 按照字串長度排序 重寫了Comparator介面中的方法 class CompareByLen implem

ArrayList的擴容方式擴容時機

初始化 ArrayList的底層是一個動態陣列,ArrayList首先會對傳進來的初始化引數initalCapacity進行判斷 如果引數等於0,則將陣列初始化為一個空陣列, 如果不等於0,將陣列

RelativeLayoutLinearLayout效能比較 相對佈局線性佈局的效能比較

 看到幾篇關於RelativeLayout和LinearLayout效能分析的部落格,寫的相當不錯,這裡在大神的基礎上,增加了部分內容      RelativeLayout和LinearLayout是Android中常用的佈局,兩者的使用會極大的影響程式生成每一幀的效能,因此,正確的使用它們是提升

增加刪除資料時,為什麼LinkedList通常比ArrayList快?

實驗  首先我們做一個實驗:將10萬條String型別的資料分別新增到一個LinkedList和一個ArrayList中,且每次都是在第0位(即首位)插入資料,程式碼如下 結果是LinkedList比

Java學習筆記之集合(三):ArrayList集合的原理特點

package com.collection; import java.util.ArrayList; import org.junit.Test; /* 集合的體系: ----| Colle

ArrayListVector的區別,HashMapHashtable的區別以及執行緒安全的理解

就ArrayList與Vector主要從二方面來說. 一.同步性:Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的 二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的