java集合概覽

java集合概覽:

  咱們先經過一張圖來了解java集合。html

 

 

   從上圖能夠看到,java集合主要分爲兩大類,分別是Collection和Map。上圖只列舉了經常使用的幾個實現類,若是要看全部的實現類,能夠查看JDK文檔。java

Collection的全部子接口和實現類以下:設計模式

 

 

 

Map的全部子接口和實現類以下:學習

 

 

  能夠看到集合的實現類很是很是的多,可是不用怕,咱們只須要學習經常使用的便可,好比第一張圖中的就是必需要掌握的。還有些JUC包下的重要的同步實現類,圖中沒有畫出來,後續會進行講解。咱們先來看看幾個接口的區別:spa

  • Collection 接口存儲一組不惟一,無序的對象
  • List 接口存儲一組不惟一,有序(插入順序)的對象
  • Set 接口存儲一組惟一,無序的對象
  • Map接口存儲一組鍵值對象,提供key到value的映射 

迭代器:

  咱們在使用集合的過程當中,避免不了要對集合進行遍歷,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

相關文章
相關標籤/搜索