咱們先經過一張圖來了解java集合。html
從上圖能夠看到,java集合主要分爲兩大類,分別是Collection和Map。上圖只列舉了經常使用的幾個實現類,若是要看全部的實現類,能夠查看JDK文檔。java
Collection的全部子接口和實現類以下:設計模式
Map的全部子接口和實現類以下:學習
能夠看到集合的實現類很是很是的多,可是不用怕,咱們只須要學習經常使用的便可,好比第一張圖中的就是必需要掌握的。還有些JUC包下的重要的同步實現類,圖中沒有畫出來,後續會進行講解。咱們先來看看幾個接口的區別:spa
咱們在使用集合的過程當中,避免不了要對集合進行遍歷,javaAPI提供了一個公共的遍歷接口Iterable,咱們來看下它是怎麼實現遍歷的。咱們以ArrayList實現類爲例子,看以下代碼:設計
package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @ClassName CollectionTest * @description: * @author:liuyi * @Date:2020/12/6 21:03 */ public class CollectionTest { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
能夠看到用迭代器方式遍歷一個集合十分的簡單,那它究竟是怎麼作到了呢。其實它的實現屬於一種設計模式,迭代器模式,能夠參考我這篇文章https://www.cnblogs.com/liu-yi/p/13997431.html。在這篇文章裏面,我自定義實現了一個迭代器,和jdk自帶的幾乎如出一轍,咱們經過源碼來分析它的實現過程。先來看ArrayList的類的繼承關係:code
正如咱們上面說的同樣,它最終實現了Iterable接口,咱們來看Iterable的源碼:htm
咱們圖中圈了一個方法iterator,這就意味着它全部的實現類都須要實現這個方法,因此咱們在代碼裏面寫的Iterator<Integer> iterator = list.iterator();這裏調用的就是ArrayList實現的這個方法,代碼以下:對象
因此迭代器的實現,也能夠說迭代器模式其實就是多態的一個典型的應用,十分簡單,也很好理解。至於Iterator接口中的兩個方法hasNext和next兩個方法也很好理解,一個是判斷是否還有值,若是有值就獲取這個值。blog