Collection 架構

版权声明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_43821974/article/details/84900196

Collection 架構

ArrayList
List
LinkedList
Deque
HashSet
Set
TreeSet
Queue
PriorityQueue
ArrayDeque
Collection
Iterable
  1. List 允許重複的有序集合,如:ArrayListLinkedList
    1. ArrayList 訪問速度快,但是向 List 中間插入或刪除元素的速度慢。
    2. LinkedList 訪問速度慢,但是向 List 中間插入或刪除元素的速度快。
      P.S. 當操作的陣列頻繁使用查詢,則使用 ArrayList
      ,若需要頻繁的從前面或中間添加數據就使用 LinkedList
  2. Set 集合中的物件不按特定的方式排序且無重複物件。,如:HashSetTreeSet
    1. HashSet 按照哈希算法來存取集合中的物件,存取速度較快。
    2. TreeSet 能夠對集合中的物件進行排序。
      P.S. 不同之處在於,像 add,remove,contains,size …等操作,HashSet 比TreeSet 有更好的性能。
  3. Queue 順序存取的結構,依照先進先出的原則來存取的佇列 (FIFO),如:ArrayDequePriorityQueue
    1. ArrayDeque 因為實現了 Deque 接口,可以在隊列頭部和尾部進行操作。
    2. PriorityQueue 每次從隊列中取出的是最高優先權的元素,若沒有提供 Comparator ,優先對列中元素默認為自然順序。
  • 有序:取出和存入的顺序一致。
  • 無序:取出和存入的顺序不一致。

List

private int testCount = 100000;

 private void addMethod(List list) {

        // 取得 Class Name
        String className = getClassSimpleName(list);

        long startTime = getCurTimeMills();

        for (int i = 0; i < testCount; i++) {
            list.add(0, i);
        }
        printIntervalTimeMillis(startTime, className, "Add");
    }

ArrayList–Add–執行時間 : 977
LinkedList–Add–執行時間 : 6

private void getMethod(List list) {
        // 取得 Class Name
        String className = getClassSimpleName(list);

        long startTime = getCurTimeMills();

        for (int i = 0; i < testCount; i++) {
            list.get(i);
        }
        printIntervalTimeMillis(startTime, className, "Get");
    }

ArrayList–Get–執行時間 : 7
LinkedList–Get–執行時間 : 3419

private void removeMethod(List list) {
        // 取得 Class Name
        String className = getClassSimpleName(list);

        long startTime = getCurTimeMills();

        for (int i = 0; i < testCount; i++) {
            list.remove(0);
        }
        printIntervalTimeMillis(startTime, className, "Remove");
    }

ArrayList–Remove–執行時間 : 529
LinkedList–Remove–執行時間 : 5

通用方法:

	// 打印執行時間
    private void printIntervalTimeMillis(long startTime, String className, String methodName) {
        System.out.println(className + "--" + methodName + "--" + "執行時間 : " + (getCurTimeMills() - startTime));
    }

    // 取得當前系統時間
    private long getCurTimeMills() {
        return System.currentTimeMillis();
    }

    private String getClassSimpleName(List list) {

        return list.getClass().getSimpleName();
    }

Set

暫時沒有寫,對此還不熟悉。

Queue

佇列示範

先進先出 ( First - In - First - Out, FIFO) 的排程

  1. enqueue :將資料放入佇列尾端。
    P.S. C++ 用 push,JAVA 用 offer。
  2. dequeue:取出佇列前端的資料。
    P.S. C++ 用 pop,JAVA 用 poll。

參考文獻

  1. LinkedList 與 ArrayList 的比較
  2. HashSet 與 TreeSet 的比較
  3. ArrayDeque 與 PriorityQueue 的比較
  4. 什麼是 Queue ?

猜你喜欢

转载自blog.csdn.net/weixin_43821974/article/details/84900196
今日推荐