ArrayList LinkedList 原始碼分析

2021-05-27 10:08:57 字數 951 閱讀 7775

鍊錶原始碼很簡單

看核心資料結構

private transient entryheader = new entry(null, null, null);

乙個頭節點。

再看下entry的結構

e element;

entrynext;

entryprevious;

這就是雙項鍊表entry的結構

看看裡面方法實現

private entryentry(int index)  else 

return e;

}

private entryentry(int index)  else 

return e;

}

基於 index的新增與刪除都是先和 中間位置比較

基於 object的比較和刪除 則都是從頭節點開始查詢  同樣有 modcount屬性。

2. arraylist

核心資料結構

private transient object elementdata;

預設容量是10

在表末尾的增刪操作 速度很快 o(1)級別

下面看一下隨機位置新增 刪除的**

public void add(int index, e element)

刪除後會有乙個調整陣列的操作。

迭代器同樣擁有快速失效的特性

兩者效能比較, linkedlist 適用於隨機增刪,但是前提是表不大, 不然搜尋操作會很費時,  arraylist 讀元素和末尾寫速度很快,其主要操作都有陣列調整的過程,

但是陣列是記憶體中連續一塊的時間,移動速度較快

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

AbstractListView原始碼分析3

normal list that does not indicate choices public static final int choice mode none 0 the list allows up to one choice public static final int choice ...

Android AsyncTask原始碼分析

android中只能在主線程中進行ui操作,如果是其它子執行緒,需要借助非同步訊息處理機制handler。除此之外,還有個非常方便的asynctask類,這個類內部封裝了handler和執行緒池。本文先簡要介紹asynctask的用法,然後分析具體實現。asynctask是乙個抽象類,我們需要建立子...