ArayListとLinkdListの違い

2889 ワード

ArayListとLinkdListの大まかな違いは、一般的に知られています.1.ArayListは、動的配列に基づくデータ構造を実現し、LinkdListは、チェーンベースのデータ構造に基づいています.2.ランダムアクセスgetとsetに対して、ArayListはLinked Listより優れていると思います.なぜならLinked Listはポインタを移動するからです.3.追加と削除操作addとremoveに対して、Linded ListはArayListがデータを移動するために優位を占めています.    この点は実情による.単一のデータだけを挿入または削除すると、ArayListの速度はかえってLinked Listより優れている.ただし、一括ランダム挿入削除データの場合、Linked Listの速度はArayListよりも大きく、ArayListは挿入データごとに挿入点およびその後のすべてのデータを移動します.  この点は実験しました.それぞれ200000本の「記録」があるArayListとLinkdListの首位は20000本のデータを挿入し、Linked Listは約20分の1を費やす.
for(int m=0;m<20000;m+){       linkedlist.add(m,null)      //2000本のデータの前に20000本のデータを挿入すると、LinkdListは1125 msしか使用できません.これがLinked Listの強みです.      }        long タイム4 = new Dte().getTime();        System.out.print(batch) linkedlist add:「);        System.out.println(time 4) - time 3);       for(int n=0;n<20000;n+){        arraylist.add(n null);  //200000本のデータの前に20000本のデータを挿入すると、ArayListは18375 msを使いました.時間はarraylistの20倍近くかかります(テスト時のマシン性能を見ます).       }        long タイム5 = new Date().getTime();        System.out.print(batch) arraylist add:「);        System.out.println(time 5) - time 4);
4.検索操作indexOf、lastIndexOf、containsなどは、ほぼ同じです.5.ランダム検索指定ノードの操作get、ARrayListの速度はLinked Listより速いです.ここでは理論的に分析しても、ArayListは最後にデータを挿入したり削除したりすると、かえってLinked Listより速いです.2000本のデータを挿入したり削除したりしたりしたりしました.
    /*  insert200000    linkedlist arraylist
    *          ,arraylist    linkedlist        
    */
    public static void insertList(LinkedList linklist, ArrayList arraylist) {
        long time1 = new Date().getTime();
        System.out.println(time1);
        for (int i = 0; i < 200000; i++) {
            linklist.add(i, "linklist" + i);
        }
        long time2 = new Date().getTime();
        System.out.println(time2 - time1);
        for (int j = 0; j < 200000; j++) {
            arraylist.add(j, "arraylist" + j);
        }
        long time3 = new Date().getTime();
        System.out.println(time3 - time2);
    }


/*delete linkedlist arraylist  200000   
    *          ,arraylist    linkedlist        
    */
    public static void deleteList(LinkedList linklist, ArrayList arraylist) {
        long time1 = new Date().getTime();
        System.out.println(time1);
        for (int i = 199999; i >= 0; i--) {
            linklist.remove(i);
        }
        long time2 = new Date().getTime();
        System.out.println(time2 - time1);
        for (int j = 199999; j >= 0; j--) {
            arraylist.remove(j);
        }
        long time3 = new Date().getTime();
        System.out.println(time3 - time2);
    }

    public static void main(String args[]) {
        LinkedList linkedlist = new LinkedList();
        ArrayList arraylist = new ArrayList();
        insertList(linkedlist, arraylist);

                                        //      
挿入:LinkdList 578 msArayList 437 ms削除:Linked List 31 msArayList 16 ms