国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java接口RandomAccess全面了解

2019-11-26 13:52:03
字體:
來源:轉載
供稿:網友

在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全面了解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄大仙区| 汤阴县| 太谷县| 镇安县| 义马市| 双辽市| 盐源县| 鹿泉市| 如皋市| 罗平县| 梁河县| 宽城| 肇源县| 大连市| 政和县| 苏尼特右旗| 城口县| 新余市| 广汉市| 尼勒克县| 赤峰市| 连山| 土默特右旗| 措美县| 永吉县| 遂昌县| 大厂| 怀来县| 阿拉善盟| 历史| 腾冲县| 江西省| 萨迦县| 紫阳县| 房产| 凭祥市| 英吉沙县| 二连浩特市| 裕民县| 鄂尔多斯市| 临高县|