java的list幾種實現方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java時間戳記的三種擷取方式比較

來源:互聯網
上載者:User

標籤:java   list   arraylist   linkedlist   java列表   

一、list簡介
List列表類,順序儲存任何對象(順序不變),可重複。List是繼承於Collection的介面,不能執行個體化。執行個體化可以用:    ArrayList(實現動態數組),查詢快(隨意訪問或順序訪問),增刪慢。整體清空快,線程不同步(非安全執行緒)。數組長度是可變的百分之五十延長    LinkedList(實現鏈表),查詢慢,增刪快。    Vector(實現動態數組),都慢,被ArrayList替代。長度任意延長。安全執行緒(同步的類,函數都是synchronized)    Stack(實現堆棧)繼承於Vector,先進後出。所以,快速存取ArrayList,快速增刪LinkedList,單線程都可以用,多線程只能用同步類Vectorlist基本操作    插入:add()    尋找:get()    刪除:remove(int index)    修改:set()    清空表:clear()    遍曆:用Iterator迭代器遍曆每個元素,如
List al = new ArrayList();Iterator it = al.iterator()while (it.hasNext()){    System.out.println(it.next().toString());}
此外,其他函數    boolean add(int index, E element)    boolean addAll(index,Collection)
二、ArrayList和LinkedList的效率比較2.1 原理
    順序儲存是將資料元素存放於一個連續的儲存空間中,實現順序存取或(按下標)直接存取。儲存效率高,速度快。但空間大小一經定義,在程式整個運行期間不會發生改變,因此,不易擴充。同時,由於在插入或刪除時,為保持原有次序(沒有規定元素進棧順序),平均需要移動一半(或近一半)元素,修改效率不高。    連結儲存表示的儲存空間一般在程式的運行過程中動態分配和釋放,且只要儲存空間中還有空間,就不會產生儲存溢出的問題。同時在插入和刪除時不需要保持資料元素原來的物理順序,只需要保持原來的邏輯順序,因此不必移動資料,只需修改它們的連結指標,修改效率較高。但存取表中的資料元素時,只能循鏈順序訪問,因此存取效率不高。
2.2 代碼測試
package test;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ListTest {    public static void main(String[] args) {        List<String> LList = new LinkedList<String> ();        List<String> AList = new ArrayList<String> ();        long startTime = System.currentTimeMillis();        for(int i=0;i<10000;i++)        {            LList.add(""+i);        }        long endTime = System.currentTimeMillis();        long result = endTime - startTime;        System.out.println("linkedlist:"+result);        startTime = System.currentTimeMillis();        for(int i=0;i<10000;i++)        {            AList.add(""+i);        }        endTime = System.currentTimeMillis();        result = endTime - startTime;        System.out.println("arraylist:"+result);    }

結果發現速度上ArrayList 比LinkedList要快的多

這裡用來擷取時間戳記(毫秒)來計算時間的方式用三種,
//方法一 速度最快
System.currentTimeMillis();
//方法二 比方法一慢,低於一倍的時間
new Date().getTime();
//方法三 速度最慢,Canlendar處理時區耗時
Calendar.getInstance().getTimeInMillis();

另外,文章http://blog.csdn.net/inkfish/article/details/5185320中
提到了更多的list,以及效能比較,可以參看

結論:   1.隨機插入、隨機刪除操作中,用TreeList 效率最高;  2.在只需要追加、迭代的環境下,LinkedList 效率最高;  3.平均效率來講,ArrayList 相對平衡,但如果海量隨機操作,還是會造成效能瓶頸;  4.CopyOnWriteArrayList 因為安全執行緒的原因,致使效能降低很多,所以慎用;  5.Vector 沒有傳說中那麼低的效率;  6.讓Stack 來做List 的事可以,不過語義上Stack 不應該做過多的List 的事情;  7.在排序中,ArrayList 具有最好的效能,TreeList 平均效能也不錯,LinkedList 的排序效率受元素初始狀態的影響很大。  8.各種List 間轉換幾乎沒有時間損耗。

java的list幾種實現方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java時間戳記的三種擷取方式比較

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.