集合概述

Java中的集合概述

1. 概述

Java中的集合主要有兩種:java

  1. Collection
  2. Map

集合的本質是用來存儲批量的對象。數組

2. Collection接口

Collection 類是一個接口類,定義了集合中最基本的經常使用方法。安全

繼承了Collection的接口類有:數據結構

  • List
  • Set
  • Queue

實現了Collection的抽象類有:多線程

  • AbstractCollection

AbstractCollection衍生了兩個子抽象類,分別是:併發

  • AbstractList
  • AbstractSet

圖示以下:函數

img

咱們主要仍是關注下具體的實現類吧。線程

2.1 List

List接口有四個實現類3d

  • LinkedList
  • ArrayList
  • Vector
  • Stack(Vector的子類)

2.1.1 LinkedList

  1. 基於雙向鏈表實現
  2. 不支持任意性的訪問,便於插入和刪除,不便於遍歷
  3. 非線程安全(即支持多個線程併發讀取)

2.1.2 ArrayList

  1. 基於數組實現
  2. 初始容量是10,快要溢出時會進行動態擴容(1.5倍擴容)
  3. 支持任意性的訪問(根據索引)
  4. 非線程安全(即支持多個線程併發讀取)

2.1.3 Vector(基本不使用,被ArrayList取代)

  1. 基於數組實現
  2. 支持任意性的訪問(根據索引)
  3. 線程安全(同一時刻,只能有一個線程讀取Vector)

2.1.4 Stack

  1. 繼承於Vector
  2. 實現了數據結構中後進先出的堆棧
  3. 主要方法有:
    • push()// 添加元素到棧頂
    • pop()//刪除棧頂的元素
    • peek() 獲取棧頂元素
    • empty() 判斷是否爲空

2.2 Set

Set是元素不可重複根據元素的hashCode()和equals()方法來判斷兩個元素是否相同)的集合,容許null的存在,但僅能存在一個(由於set的元素不能重複);不支持隨機訪問( 無序), 雖然Set中元素沒有順序,可是元素在set中的位置是由該元素的HashCode決定的,其具體位置實際上是固定的。對象

2.2.1 HashSet

  1. 元素不可重複
  2. 底層是HashMap,存儲的key是插入的元素,value是一個Object
  3. 非同步(線程不安全)
  4. 不保證插入順序和讀取順序一致

2.2.2 LinkedHashSet

  1. 繼承於HashSet
  2. 底層是LinkedHashMap
  3. 有序(鏈表維護順序),
  4. 非同步(線程不安全)

2.2.3 TreeSet

  1. 有序
  2. 底層是TreeMap
  3. 非同步(線程不安全)
  4. 經過compare或者comparaeTo函數來判斷元素是否相等

3. Map接口

Map沒有繼承Collection,是多個鍵值對元素組成的集合,提供了鍵(key)到值(value)的映射,key不可重複

3.1 HashMap

  1. 以哈希表的數據結構(數組+鏈表)實現,查找對象時經過哈希函數計算其位置,查詢效率高
  2. 內部定義有hash表數組,經過哈希函數將元素(鍵值對)的哈希地址,轉換爲hash表數組的索引(下標)
  3. 若是有兩個元素計算出來的索引值相同,則用鏈表的數據結構將兩個元素串起來,此時,兩個元素的hash值相同
  4. 線程不安全
  5. 繼承於AbstractMap,實現了Map、Cloneable、java.io.Serializable接口。

3.2 HashTable

  1. 線程安全版的HashMap,通常用於多線程中
  2. 鍵值都不容許爲null
  3. 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable接口

3.3 LinkedHashMap

  1. 繼承於HashMap
  2. 經過鏈表的數據結構( 雙鏈表 )來保證讀取順序和插入順序一致
  3. 非線程安全

3.4 TreeMap

  1. 有序
  2. 非線程安全
  3. 基於紅黑樹實現
  4. 每個key-value節點做爲紅黑樹的一個節點。TreeMap存儲時會進行排序
  5. 其中排序方式也是分爲兩種,一種是天然排序,一種是定製排序
    • 天然排序: TreeMap中全部的key必須實現Comparable接口,而且全部的key都應該是同一個類的對象,不然會報ClassCastException異常。
    • 定製排序: 定義TreeMap時,建立一個comparator對象,該對象對全部的treeMap中全部的key值進行排序,採用定製排序的時候不須要TreeMap中全部的key必須實現Comparable接口
  6. 判斷元素相等的依據: 兩個key經過compareTo()方法返回0,則認爲這兩個key相等。

3.5 WeakHashMap

  1. 繼承於AbstractMap
  2. 鍵和值均可以是null
  3. 鍵是」弱鍵「
  4. 線程不安全
  5. 數據結構是哈希表(還有單項鍊表)
相關文章
相關標籤/搜索