我決定,還是從基礎學起!
1.ArrayList實際上應該是數組實現,所以不方便做大量的刪除和添加,但是很有效與get(),set()方法
?? LinkedList是基于鏈表實現,所以不應該用作隨機訪問,但是add(),remove()方法很適用
2.add(),remove()方法會破壞集合的結構,所以在用兩個線程訪問時會出現同步問題.但是set()(改變之前訪問的值)不會.
3.vector和arraylist都是基于數組實現的,它們的區別在于,vector是同步的,會消耗更多的資源,所以不需要同步時,最好使用arraylist
? 同樣的例子還有Hashtable(同步)和HashMap
4.集合的某些操作會有boolean的返回值,該值表示是否改變了集合的結構(比如add).由此可以判斷操作是否成功
5.HashSet不能存放相同的元素, 而且是無序存放的. TreeSet提供了排序的方法,可以讓元素自身實現Comparable接口,或者 為TreeSet制定特殊的排序類Comparator
6. PriorityQueue提供了高效的得到最小元素的方法,這有助于實現任務調度器類似的功能
7.Map的keySet, entrySet, values可以訪問和刪除鍵值或者鍵名,但是不能增加.增加的話必須直接調用Map的方法.同樣,Map中相同的元素只能有一個鍵名
8.WeakHashMap可以把map中不再需要的元素由gc回收
9.LinkedHashSet和LinkedHashMap提供了排序的方法,但是這個排序是可以控制的,accessOrder為true時是按照訪問的順序進行的,為false時是按照你的輸入順序
10.IdientityHashMap通過內存地址計算hascode,因此可以擁有相同的元素,因為它中間的比較是通過"=="而不是equals
11.Collections類提供了一系列操作Collection接口的方法和算法, 比如二分查找, 排序等等(請注意Collections和Collection的區別)
12.視圖技術:
??? 這是集合框架一項出色的技術, 對于現有集合的操作, 比如說選取子集, 由該集合產生特殊集合等等,實際上都沒有創建新的集合,而是在原有集合上創建視圖,該視圖是實現了Collection接口的特殊實現類,用戶對這些類的調用實際上還是對被其包裹的原有集合的調用, 視圖實際上起到了的代理的作用
?? 因此,視圖的問題在于通過視圖你有時無法調用接口的所有方法,比如List.asList(Array a)可以把數組包裹成列表,但實際上,我們的操作還是直接傳到了數組之中.因此,對于這樣的列表, 所有的更改結構的方法(如add, remove)都不被支持.(代測驗)