Java集合歸納-集合概述

前言

Java的集合類可以說是我們編程中最常用的一種容器了,用來存放多個對象的引用,實現常用的數據結構,如隊列、棧等。常用的集合類有Set、List、Map、Queue(Java5增加),但是大多數程序員還是會習慣性的忽略Queue,而只認爲集合對象爲前三者。

劃分

按照接口的派生來說,集合可以劃分爲兩大類。

  • Collection接口派生:List、Set
  • Map接口派生:Map

但是按照我的理解,還可以有一種劃分形式,那就是按照實現原理來劃分,List是一類,Map和Set是一類。

  • 無序不重複:Map、Set
  • 有序可重複:List

爲什麼這麼說呢,首先,List集合類似一個數組,它可以記住集合容器內元素添加的順序,且長度是可變的。而Map和Set類似一個桶,我們把元素一股腦的全部丟到桶中,無法記錄其添加順序,這就解釋了爲什麼Set元素和Map的Key是不能重複的,元素本身就無序了,再重複的話,我們想從中準確查找某一個元素該怎麼辦呢

其實看過Set源碼的同學就會發現,Set的實現可以說就是一個所有value值爲null的Map結構。Java先實現了Map,再包裝一個所有value值爲null的Map來實現Set

不僅如此,Set和Map的子類實現也驚人地相似。

  • Set的子類實現:HashSet、LinkedHashSet、SortedSet(Interface)、TreeSet、EnumSet。
  • Map的子類實現:HashMap、LinkedHashMap、SortedMap(Interface)、TreeMap、EnumMap。

所以在想要系統的掌握集合的相關知識時,通過實現上的相似之處,可以通過推導的方式記憶有關集合的知識。

Collection接口方法

Collection是List、Set的父接口,在父接口中定義了Collection所有子類實現的通用基本操作。諸如add、addAll、clear、contains、containAll…等等。在這裏就不一一贅述,大家都應該用過且api中都查得到。
實際應用中,我們根本無需對這些方法死記硬背,只需記住集合類就像容器,容器的功能無非逃不開添加對象、刪除對象、清空容器、容器中有沒有某個東西、判斷容器是否爲空等,集合類的方法就是這些功能的實現

Iterator迭代器

Iterator是Java集合中的重要成員,主要用於遍歷Collection集合中的元素,因此也被叫做迭代器。它不像其他集合那樣,作爲容器用於存放對象,且本事並不具備存放對象的能力。

Iterator的方法有:

  • boolean hasNext():如果被迭代的元素還沒遍歷完,返回true
  • Object next():返回集合中的下一個元素的值
  • void remove():刪除迭代器中上一個next方法返回的元素的值
  • void forEachRemaining(Consumer action):Java8新增遍歷方法

注意上面文字中加粗的地方,以前見過很多人有這樣的誤區,Iterator中迭代的就是集合本身,其實這是不對的。
當Iterator對集合元素進行迭代時,Iterator並不是把集合元素本身傳遞給了迭代變量,而是把集合元素的值傳遞給了迭代變量,所以修改迭代變量的值,對於被迭代的集合本身是沒有任何影響的

還有一點要注意的是,Iterator迭代器採用的是快速失敗(fail-fast)機制,一旦系統發現集合的值在迭代過程中,該集合內的元素被其他線程所修改,程序會立刻拋出ConcurrentModificationException,這樣做可以避免線程間共享資源的不同步問題,也算是線程安全的一種體現。

後續會分別詳細記錄關於Set、List和Map的知識點歸納,方便日後時常翻閱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章