1. 程式人生 > >JVM如何知道哪些資料結構是隨機查詢哪些是順序查詢?

JVM如何知道哪些資料結構是隨機查詢哪些是順序查詢?

最具代表性的是:ArrayList和LinkedList ArrayList: public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable 可以看到ArrayList繼承AbstractList類,實現List、RandomAccess、Cloneable、Serializable介面。 實現隨機查詢最為關鍵的是實現介面:RandomAccess 我們可以進一步看看RandomAccess介面: public interface RandomAccess { } 它僅僅作為一個隨機訪問的標誌介面。有了這個標誌介面JVM在編譯執行的時候就能知道這是一個隨機訪問的資料介面,成功實現隨機訪問。 LinkedList:

public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable 相比與ArrayList,LinkedList實現的Deque(deque 即雙端佇列)介面,即LinkedList的底層實現就是雙向連結串列,而ArrayList是動態陣列。沒有RandomAccess標誌介面JVM在處理的時候就只能順序查詢。 接下來我們探討RandomAccess標誌介面,RandomAccess的實現原理應該是這樣的: public static void traverse(List list){

    if (list instanceof RandomAccess){
        System.out.println("實現了RandomAccess介面,不使用迭代器");

        for (int i = 0;i < list.size();i++){
            System.out.println(list.get(i));
        }
    }else{
        System.out.println("沒實現RandomAccess介面,使用迭代器");
        Iterator it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

注:如有不對之處歡迎指正,謝謝!。