前面咱們講到了集合的定義以及集合的 Iterator。咱們知道集合分爲 Collection和 Map,今天咱們的重點是學習 Collection。編程
咱們再來回顧一下集合解決了什麼問題:在編譯期間不知道要多少個對象,可是數組必須在申明的時候明確指明數組長度,若是使用數組,申請太多的空間就會形成資源浪費,若是申請太少空間,就不夠用,因此引出了一個概念叫「集合」。數組
從這裏咱們能夠看出,集合的特性有:數據結構
所以,咱們能夠理解集合是一個高級的數組。可能這種說法不太合理,那我換個說法吧,集合是許多個體組織成的一個總體。學習
既然是總體,那麼確定有增刪改查等各類操做,咱們前面在面向對象的理解中講了接口的理解:接口就是對一個對象的行爲進行規範,使對象具備作某些事情的能力。集合自己只是用來存儲數據的,若是須要具備增刪改查功能,確定是用接口來擴展。很少說了,咱們來看代碼。.net
不看代碼了,Collection 就是一個接口,定義了集合的行爲規範,咱們直接看類結構圖就好。設計
#集合的抽象實現類 AbstractCollection
AbstractCollection是全部 Collection 系集合的父類。從類結構上來看,List、Set 系列的集合都繼承自 AbstractCollection。3d
AbstractCollection 沒有太多的代碼,主要實現了 Collection 接口方法。其實這個類設計仍是蠻有意思的。僅僅抽象了兩個方法iterator()和size(),其他全部的操做都在AbstractCollection 裏面實現了,在數據結構都不清楚的狀況下,僅僅經過 iterator 就實現了對集合的增刪改查。若是是咱們本身來設計一個集合,可否在不清楚數據結構的狀況下,就寫出對集合的增刪改查方法的具體實現呢?我想這就是面向對象編程 OOP 的魅力所在吧。cdn
接下來我會根據 List、Set、Queue 三個 Collection 接口的繼承接口來學習 Collection 集合的各類實現。對象