RandomAccess介面的作用

2021-09-24 15:15:07 字數 1388 閱讀 9463

通過collections的binarysearch()方法我們可以看到裡面有用到randomaccess,它先判斷集合是否實現了randomaccess從而判斷是使用indexedbinarysearch()方法還是iteratorbinarysearch()方法,也就是說這兩個方法才是決定arraylist是如何進行快速隨機訪問的關鍵,那接下來我們就去看下這兩個個方法的區別;

乍一看好像一樣,但是它們取值的方式不一樣,乙個是通過索引遍歷,乙個是通過iterator迭代器遍歷,難道是迴圈遍歷比迭代器速度快嗎?

那我們接下來實驗對比一下

arraylist和linkedlist各自迴圈遍歷和迭代器遍歷性能大比拼:

//10000條資料測試結果: for迴圈遍歷下:arraylist速度遠大於linkedlist, 迭代器遍歷下:linkedlist速度稍快於arraylist

注:我試了下10w條資料測試,linkedlist進行for迴圈遍歷需要3-4秒左右, 其他效能變換不大

//arraylist 10000條資料測試:

//linkedlist 10000條資料測試:

稍微總結一下,這次測試我參考了其他朋友的部落格,結果基本一致,那最後我們也明白randomaccess介面是如何讓arraylist進行快速隨機訪問的了,其實就是判斷list是否實現了該介面,從而選取特定的遍歷方式;

arraylist是陣列結構,長度是可變的,原理是(創新陣列+複製陣列),查詢快(時間複雜度是o(1)),增刪慢,不同步。arraylist不是執行緒安全的,只能用在單執行緒環境下,多執行緒可以考慮collections.synchronizedlist函式返回乙個執行緒安全的arraylist類,或者使用concurrent並發包下對應的集合類

linkedlist的底層實現則是基於雙向迴圈鍊錶實現的,是鍊錶結構,不同步的,增刪速度快(時間複雜度為o(1)),查詢較慢(時間複雜度卻是o(n))。由於實現了queue介面,因此也可以用於實現堆疊,佇列。

集合類 關於RandomAccess介面的研究

randomaccess介面是list 實現所使用的標記介面,用來表明其支援快速 通常是固定時間 隨機訪問。此介面的主要目的是允許一般的演算法更改其行為,從而在將其應用到隨機或連續訪問列表時能提供良好的效能。在對list特別的遍歷演算法中,要盡量來判斷是屬於randomaccess 如arrayli...

RandomAccess介面理解

randomaccess 是乙個標記介面,用於標明實現該介面的list支援快速隨機訪問,主要目的是使演算法能夠在隨機和順序訪問的list中表現的更加高效。我們可以簡單的看下collections下的binarysearch方法的原始碼 public static int binarysearch l...

Java學習手冊 RandomAccessFile

1 方式 1 randomaccessfile提供了乙個可以從檔案中讀取位元組的方法 int read 該方法會從檔案中讀取乙個byte 8位 填充到int的低八位,高24位為0,返回值範圍正數0 255,如果返回 1表示讀取到了檔案末尾。每次讀取後自動移動檔案指標,準備下次讀取。2 randoma...