鍊錶原始碼很簡單
看核心資料結構
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是乙個抽象類,我們需要建立子...