1. 程式人生 > >Java集合--概述

Java集合--概述

目錄

Java集合--概述

摘要

​ 本文主要介紹集合的整體概念,並作為接下來Java集合實現類講解的索引。

圖示

​ 這是在網上看到了這樣一張圖,感覺很清晰,內容也很全面,我決定按這張圖,把自己熟悉的集合都仔細研究一下。

java集合

檢視大圖

各位置描述

位置 描述
左上灰色部分 已經過期,以後的開發中不要使用。
右上淺粉色部分 介面關係圖
中間綠色部分 java.util包裡集合具體實現類
右下灰色部分 java.util.concurrent包裡面的類,用來處理java併發問題

集合分類

分類 描述
Map 雙鏈集合,允許通過鍵來找到值
List 按照插入順序儲存元素
Set 不允許有重複元素
Queue 從一端插入元素,從另一端獲取

實現類

介面 實現類
List ArrayList、LinkedList
Set HashSet、LinkedHashSet、TreeSet
Queue PriorityQueue、LinkedList
Map HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap

底層資料結構

底層資料結構 實現類
陣列 EnumMap、ArrayList、ArrayQueue
連結串列 LinkedHashSet、LinkedList、LinkedHashMap
紅黑樹 TreeMap、TreeSet
二叉堆 PriorityQueue
雜湊表 HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap

正文

一、集合的由來

​ 如果一個程式只包含固定數量且生命週期都是已知的物件,那麼這是一個非常簡單的程式

​ 為了滿足常規的程式設計需要,我們要求能在任何時候,任何地點建立任意數量,甚至是不同型別的物件,由於陣列只能裝統一型別資料,而且長度固定,於是產生了集合。

二、集合特點
  • 集合只能存放物件。基本資料型別會自動裝箱為包裝類。
  • 集合存放的是物件的引用,物件本身還是放在堆記憶體中。
  • 集合可以存放不同型別,不限數量的資料型別。
三、迭代器

​ 使用集合必須對具體實現類進行操作,但是考慮如下狀況:如果原本是對List進行程式設計,現在要把相同的程式碼用在Set上,如果能不關心容器型別只關心對集合得操作該怎麼辦?於是,迭代器因此產生。

​ 迭代器是一個物件,它的工作就是遍歷並選擇序列中的物件,而且客戶端不需要關注序列的底層結構,Java中Iterator只能單向移動,但是其子介面ListIterator可以雙向移動。

​ Iterator中有hashNext(),next(),remove()幾個方法,ListIterator在它的基礎上又添加了三種方法,分別是 add(),previous(),hasPrevious()

​ Collection頂層結構介面是Iterable,而Map的頂層介面是Map,Collection下的集合都可以用迭代器遍歷,Map可以使用Set<Map.Entry<K, V>> entrySet()方法轉換為Set進行迭代遍歷。

​ Iterable中包含Iterator<T> iterator()方法,Collection下集合使用該方法後會返回迭代器,可對迭代器進行迭代遍歷。

​ 通常來講有序的集合中有Iterator<T> iterator()ListIterator<E> listIterator()方法,可以進行雙向遍歷,無序的集合中有Iterator<T> iterator(),只能向後遍歷。

四、實現自己的集合

​ 如果想實現自己的集合可以JDK提供的抽象類,如AbstractList,AbstractMap,通常這些抽象類已經為我們提供了現成的實現,可以根據需要對特定的抽象方法重寫,直接實現List、Map這樣的介面是需要實現所有方法工作量過大。

​ 不過通常來講,java已經提供提供了豐富的集合實現,很少會需要我們自己去實現集合。


本文參考:

  1. Think in Java 第四版 第8章 集合部分
  2. Java 集合詳解
  3. 一張圖讓你看清Java集合類(Java集合類的總結)