Hello,你們好,元旦快到了,這裏提早祝你們元旦快樂,出行注意安全,回家的小夥伴能早日和家人見面,開開心心過元旦。Ok,切入主題,這篇文章,我本人以爲仍是比較重要的,由於我準備在宏觀上把Java集合這一塊給描述清楚。老套路,文章結構:java
Java的集合類主要由兩個接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口。來兩張圖: 數組
圖中標紅圈的表示咱們常常用的集合類。Collection接口是Set,Queue,List的父接口。Collection接口中定義了多種方法可供其子類進行實現,以實現數據操做。 安全
能夠看出Collection用法有:添加元素,刪除元素,返回Collection集合的個數以及清空集合等。 其中重點說下 iterator()方法,該方法的返回值是Iterator。 這個迭代器是這樣來的public interface Collection<E> extends Iterable<E> 複製代碼
使用樣例:數據結構
Collection<Day> days = new ArrayList<Day>();
Iterator<Day> iterator = days.iterator();
while(iterator.hasNext()){//判斷是否有下一個元素
Day next = iterator.next();//取出該元素
//逐個遍歷,取得元素後進行後續操做
.....
}
複製代碼
順便說一下,在遍歷Map集合的時候,雖然Map沒有繼承Iterable,不過沒有關係,能夠轉換成set,而後再遍歷:框架
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
複製代碼
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
複製代碼
其次,須要注意的是,在使用Iterable遍歷Collection時,當Collection內部的元素爲對象類型時,.next返回的是指針。也就是說是淺拷貝。函數
Set集合相似於一個罐子,"丟進"Set集合裏的多個對象之間沒有明顯的順序。Set繼承自Collection接口,不能包含有重複元素(記住,這是整個Set類層次的共有屬性)。Set判斷兩個對象相同不是使用"=="運算符,而是根據equals方法。也就是說,咱們在加入一個新元素的時候,若是這個新元素對象和Set中已有對象進行注意equals比較都返回false,則Set就會接受這個新元素對象,不然拒絕。 由於Set的這個制約,在使用Set集合的時候,應該注意兩點:spa
API層面,Set集合與Collection集合基本相同,沒有提供任何額外的方法。實際上Set就是Collection,只是行爲略有不一樣(Set不容許包含重複元素)。3d
List集合表明一個元素有序、可重複的集合,集合中每一個元素都有其對應的順序索引。List集合容許加入重複元素,由於它能夠經過索引來訪問指定位置的集合元素。List集合默認按元素的添加順序設置元素的索引.指針
API層面:List做爲Collection接口的子接口,可使用Collection接口裏的所有方法。並且因爲List是有序集合,所以List集合裏增長了一些根據索引來操做集合元素的方法。以下:code
Queue用於模擬"隊列"這種數據結構(先進先出FIFO)。隊列的頭部保存着隊列中存放時間最長的元素,隊列的尾部保存着隊列中存放時間最短的元素。新元素插入(offer)到隊列的尾部,訪問元素(poll)操做會返回隊列頭部的元素,隊列不容許隨機訪問隊列中的元素。
能夠看到,新增了offer和poll用來描述隊列這種語義。
Map用於保存具備"映射關係"的數據,所以Map集合裏保存着兩組值,一組值用於保存Map裏的key,另一組值用於保存Map裏的value。key和value均可以是任何引用類型的數據。Map的key不容許重複,即同一個Map對象的任何兩個key經過equals方法比較結果老是返回false。關於Map,咱們要從代碼複用的角度去理解,java是先實現了Map,而後經過包裝了一個全部value都爲null的Map就實現了Set集合
API:
Map集合最典型的用法就是成對地添加、刪除key-value對,而後就是判斷該Map中是否包含指定key,是否包含指定value,也能夠經過Map提供的keySet()方法獲取全部key組成的集合,而後使用foreach循環來遍歷Map的全部key,根據key便可遍歷全部的value。
Map--》Collection: Map.keySet(),entrySet(),.values().三個API
List《---》Set《---》Queue:
//Set--》List
List<String> list3 = new ArrayList<String>(new HashSet<String>());
//List--》Set
Set<String> set = new HashSet<String>(new ArrayList<String>());
複製代碼
說白了,都是經過構造方法來轉換的.
轉換這一塊給一個參考博客:
好了,宏觀角度的Collection,Map算是給你們說清楚了,包括Collection下的子接口要實現的語義(子接口實現的特有方法)。而後集合之間的轉換等等,我以爲宏觀上是比較重要的,也但願你們這一塊掌握好。Over,Hava a good day .元旦快樂,你們。