JAVA集合系列(1):集合的整體框架

前言

通常,我們的Java程序需要根據程序運行時才知道創建了多少個對象。如果在程序開發階段,我們根本不知道到底需要多少個數量的對象,甚至不知道它的準確類型。爲了滿足這些常規的編程需要,我們要求能在任何時候,任何地點創建任意數量的對象,而這些對象用什麼來容納呢?我們首先想到了數組,但是數組對於數據類型極其長度是有限制的,要求存放相同類型的數據,且長度固定。此時,如果需要存放不同類型且長度不一的數據,怎麼辦?集合便應運而生了。

Java中集合類是放在java.util中,是一個用來存儲多個對象的容器。

  • 只能存放對象,不能存放int等類型,存的是對應的是Integer等包裝類對象;
  • 存的是對象的引用,對象本身是放在堆內存中.(存儲的元素必須是引用類型);
  • 可以存放不同類型,且不限數量的數據。

1、集合的框架圖

先放一張集合框架圖:

Java中集合,從分支派系來看,注意分爲兩類:

  • Collection

  • Collection是集合類的根接口/祖宗接口。
  • 在Java源碼包中,Collection接口沒有直接的實現類,但它具有兩個子接口類來傳宗接代:即List集合、set集合。
  • List集合:一個有序的集合,可存儲重複的元素。
  • set集合:無序的,且不能存儲重複的元素。
  •  實際上Collection還有另一個子接口類:
  • Map

  • Map集合Java.util包中的另一個接口,它和Collection接口是相互獨立的,都屬於集合類的一部分。
  • Map集合是雙列的,一般是成對出現的,即(鍵,值)總是以鍵值對出現,同樣不允許存儲重複元素。

2、Collection的子接口類

2.1 List集合

List接口有三個接口實現類:LinkedList集合、ArrayList集合、Vector集合。

LinkedList集合:
1) 底層數據結構是鏈表,查詢慢,增刪快
2)線程不安全,效率高
ArrayList集合:
1).底層數據結構是數組,查找快,增刪慢。
2). 線程不安全,效率高
Vector集合:
1) 底層數據結構是數組,查詢快,增刪慢
2)線程安全,效率低

2.2 Set集合

Set接口有兩個實現類:Hashset集合、Treeset集合。

Hashset集合:
1) 底層數據結構是哈希表,HashSet依賴於HashMap,它實際上是通過HashMap實現的。哈希表依賴兩個方法hascode ()和equals()方法;
2)兩個方法的執行順序:
首先判斷hascode()值是否相同
是:繼續執行equals()方法,看其返回值
true:說明元素重複,不添加
false:就直接添加元素
否:就直接添加到集合
Treeset集合:
1)底層數據結構是二叉樹。它依賴於TreeMap,它實際上是通過TreeMap實現的。


3.Map集合

Map集合是一個映射接口,即key-value鍵值對。Map中的每一個元素包含“一個key”和“key對應的value”。

  • AbstractMap是個抽象類,它實現了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是繼承於AbstractMap。
  • Hashtable雖然繼承於Dictionary,但它實現了Map接口。

【1】Map集合是Map集合的根接口,子類有:HashMap和TreeMap集合兩個子類。
【2】Map集合中只鍵不能重複,而值是可以重複的
【3】子類的數據結構

  • Hashmap:底層數據結構是哈希表
  • Treemap底層數據結構是二叉樹,其性質和Set的底層數據結構一樣。

4.Iterator迭代器

  • Iterator:它是遍歷集合的工具,即我們通常通過Iterator迭代器來遍歷集合。我們說Collection依賴於Iterator,是因爲Collection的實現類都要實現iterator()函數,返回一個Iterator對象。
  • ListIterator:專門爲遍歷List而存在的。

5.工具類

  • Arrays:操作數組的工具類;
  • Collections:操作集合的工具類。

願你就像早晨八九點鐘的太陽,活力十足,永遠年輕。

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