JAVA容器關係圖算法
一.Collection---接口:( ! 爲經常使用內容, * 爲必須掌握的內容, ? 瞭解, 能說出底層實現原理)
1. Set接口
*HashSet---實現類(以哈希碼錶爲底層的實現機制)
?TreeSet---實現類(以二叉樹(一種數據結構)爲底層的實現機制)
在Set接口中沒有提供除了Collection接口額外的方法數組
Colletion a=new HashSet(); 數據結構
沒有順序, 不能夠重複(能夠互相equals就叫重複),無索引命令行
無序輸出對象
2. !List接口
*ArrayList---實現類(以數組爲底層的實現機制)
?LinkedList---實現類(以鏈表爲底層的實現機制)blog
Collection a=new ArrayList();排序
有順序, 能夠重複,有索引繼承
輸出按照索引順序索引
3. !Map接口(鍵值對)
*HashMap---實現
?TreeMap---實現類
每次往裏放的時候都是一對一對的(鍵值對)接口
Collection a=new HashMap();
鍵值對存放,無序輸出,
二. Collection接口的方法
Collection接口的使用
泛型集合
Collection<String> c = new ArrayList<String>();
問題: 爲何不直接寫ArrayList<String> a = new ArrayList<String>();
c.add(參數類型必須是Object)--> 父類的引用指向子類的對象
c.remove方法: 經過判斷兩個對象是否互相的equals來肯定是否是該刪除該對象, 自定義的類, 須要本身重寫父類的equals方法
重寫equals方法, 也應該重寫hashCode方法
hashCode一般用來作索引, 一個對象經過它的hashCode的值能夠找到它在內存中的地址, 因此兩個對象若是equals了, 並且又要做爲索引的狀況下, hashCode的值必須相等
三.*List接口:
ArrayList(API中說初始容量爲10的, 注意這個問題), LinkedList
有順序, 能夠重複添加
!get(索引值)
!set(索引值)
!remove(int)
!remove(Object)---判斷equals
!indexOf(Object) 返回這個對象首次出如今這個集合中的位置, 若是沒有的話, 返回-1
!lastIndexOf 返回這個對象最後一次出如今這個集合中的位置, 若是沒有的話, 返回-1
!clear 清空這個集合
四.*Map接口:
!HashMap(哈希表作索引), ?TreeMap(二叉樹作索引)
鍵值對(鍵不能重複, 什麼叫重複(能夠互相equals就叫重複))
!put(爲何有個返回值啊親 ?)
!get
!remove(key)
!remove(key, value) 當鍵值對是相對應的時候, 返回值是true
!containsKey(key)
!containsValue
*keySet--返回值--Set
?values--返回值--Collection
!size
!isEmpty
?putAll(Collection)
?clear
練習:使用String[] args在命令行上檢測輸入的字符串數組各自出現的次數
五. !Iterator接口:
Iterator爲了統一江湖, 今後出現了
全部實現了Collection接口的容器都有一個iterator方法, 用來返回一個實現了Iterator接口的對象
Iterator對象稱做迭代器, 用來方便的實現對容器內的元素的遍歷
Iterator裏面的三個方法:
hasNext()
next(), 重點注意: 這個方法每調用一次, 遊標就往下走一個
remove(), 儘可能不要與父類的方法混着用
for循環遍歷, 1.5之後纔出現的for(Objetc o : array) {}
有優勢有缺點
思考一個問題: 任何繼承了Iterator接口的都要實現它的方法, ArrayList等實現類也實現了這個接口, 爲何API沒有這個方法
六. ?Comparable接口, Collections類 List的經常使用算法: sort(List); 排序 若是須要對自定義的類進行排序, 那就必需要讓其實現Comparable接口, 實現比較兩個類大小的方法 shuffle(List); 隨機排列 void reverse(List); 逆序排列(LinkedList效率較高) copy(); 複製集合, 前提是size()相同(長度, 和容量的區別) fill(List, Object);使用某個對象填充整個List binarySearch();