abstractcollection抽象類提供了collection的骨架實現,collection分析請看:
這裡直接看它的**是如何實現的.
public abstract iterator iterator();
該方法沒有實現.
public abstract int size();
該方法沒有實現.
public boolean isempty()
非常簡單,直接呼叫size()方法返回大小,如果是0就認為是空集合.
你不會覺得奇怪吧,size()方法沒有實現,怎麼可以呼叫呢?因為這個是抽象類,不可以例項化的,具體的時候呼叫的是子類中的實現.
public boolean contains(object o) else
return false;
}**不複雜,也是呼叫自己的方法iterator,遍歷集合,如果找到了就返回true,在沒找到的情況下是要遍歷整個集合的.對於null值的情況一定要
放在if裡面,而不能放在else裡面.
public object toarray()
返回陣列,先生成乙個和集合一樣大小的陣列,然後通過遍歷賦值.
public object toarray(object a)
這個方法如果在陣列a比集合小的情況和上面是一樣的,這種情況下生成了乙個新的陣列,這裡用到了反射(從字面上就可以看出意思).為什麼不
可以直接new呢?因為陣列a中的元素是具有執行時型別的,而不僅僅是object.可以看出當a可以容納整個集合時是不用重新分配空間的,而且如果
a比集合大,會設定a[size]為null值,而且僅僅設定了這乙個.如果集合允許null值的話,通過返回陣列是無法判斷集合的大小的,因為可能集合的
最後幾個都是null值.
public boolean add(object o)
這個方法提供了實現,但是是直接丟擲乙個異常,和未實現的方法是有區別的,非抽象子類中可以不重寫這個方法,如果子類不想支援這個操作的
話,而未實現的方法子類必須實現,否則編譯同不過.
public boolean remove(object o)
}} else }}
return false;
}這個方法和contians方法基本一樣,多了一條e.remove語句而已.
public boolean containsall(collection c)
這個方法比較簡潔,但是時間複雜度是m*n,通過檢查沒乙個元素是否在集合中,如果發現乙個不在直接返回false.可以看出返回true的情況花的
時間比返回false要多.
public boolean addall(collection c)
return modified;
}這裡是通過乙個乙個加入集合的,同樣這裡的add方法是沒有實現的,要注意的一點是,只要加入了至少乙個元素函式就返回true,表示原來的集合
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是乙個抽象類,我們需要建立子...