程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java接口RandomAccess周全懂得

Java接口RandomAccess周全懂得

編輯:關於JAVA

Java接口RandomAccess周全懂得。本站提示廣大學習愛好者:(Java接口RandomAccess周全懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是Java接口RandomAccess周全懂得正文


在jdk文檔中對RandomAccess接口的界說以下:  public interface RandomAccess

上面是jdk的注解翻譯

List 完成所應用的標志接口,用來注解其支撐疾速(平日是固准時間)隨機拜訪。此接口的重要目標是許可普通的算法更改其行動,從而在將其運用到隨機或持續拜訪列表時能供給優越的機能。

將操作隨機拜訪列表的最好算法(如 ArrayList )運用到持續拜訪列表(如 LinkedList )時,可發生二次項的行動。假如將某個算法運用到持續拜訪列表,那末在運用能夠供給較差機能的算法前,勉勵應用普通的列表算法檢討給定列表能否為此接口的一個 instanceof ,假如須要包管可接收的機能,還可以更改其行動。

如今曾經熟悉到,隨機和持續拜訪之間的差別平日是隱約的。例如,假如列表很年夜時,某些 List 完成供給漸進的線性拜訪時光,但現實上是固定的拜訪時光。如許的 List 完成平日應當完成此接口。

強調:JDK中推舉的是對List聚集盡可能要完成RandomAccess接口

假如聚集類是RandomAccess的完成,則盡可能用for(int i = 0; i < size; i++) 來遍歷而不要用Iterator迭代器來遍歷。

反過去,假如List是Sequence List,則最好用迭代器來停止迭代。

JDK中說的很清晰,在對List特殊是Huge size的List的遍歷算法中,要盡可能來斷定是屬於RandomAccess(如ArrayList)照樣Sequence List (如LinkedList),由於合適RandomAccess List的遍歷算法,用在Sequence List上就差異很年夜,經常使用的作法就是:

要作一個斷定:

 if (list instance of RandomAccess) {
    for(int m = 0; m < list.size(); m++){}
  }else{
    Iterator iter = list.iterator();
    while(iter.hasNext()){}

  }

測試:

public class TestRandomAccess {
  @Test
  public void testTraverse() {
    ArrayList<Integer> arraylist = new ArrayList<Integer>();
    LinkedList<Integer> linkedList = new LinkedList<Integer>();
    initList(arraylist, 1000);
    initList(linkedList, 1000);

    System.out.println("ArrayList完成了RandomAccess接口");
    implRandomAccessTraverse(arraylist); //花了10ms時光
    System.out.println("LinkedList未完成了RandomAccess接口");
    implRandomAccessTraverse(linkedList); //花了434ms時光


    System.out.println("\nArrayList完成了RandomAccess接口");
    noImplRandomAccessTraverse(arraylist); //花了39ms時光
    System.out.println("LinkedList未完成了RandomAccess接口");
    noImplRandomAccessTraverse(linkedList); //花了27ms時光
  }

  private long startTime = 0;
  private long endTime = 0;
  // 初始化列表
  public void initList(List<Integer> list, int n) {
    for (int i = 0; i < n; i++) {
      list.add(i);
    }
  }

  //有完成RandomAccess接口的遍歷全體數據,
  public void implRandomAccessTraverse(List list) {
    startTime = System.currentTimeMillis();
    for (int count = 0; count <= 1000; count++) {
      for (int i = 0; i < list.size(); i++) {
        list.get(i);
      }
    }
    endTime = System.currentTimeMillis();
    System.out.println("應用loop迭代一共花了" + (endTime - startTime) + "ms時光");
  }

  //沒有完成RandomAccess接口的遍歷全體數據
  public void noImplRandomAccessTraverse(List list) {
      startTime = System.currentTimeMillis();
      for (int count = 0; count <= 1000; count++) {
        for (Iterator itr = list.iterator(); itr.hasNext();) {
          itr.next();
        }
      }
      endTime = System.currentTimeMillis();
    System.out.println("應用Iterator迭代一共花了" + (endTime - startTime) + "ms時光");
  }

}

以上這篇Java接口RandomAccess周全懂得就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved