搜尋
首頁Javajava教程集合是什麼? Java集合的基本介紹(附框架圖)

本篇文章帶給大家的內容是關於集合是什麼? Java集合的基本介紹(附框架圖),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

集合是什麼?

Java集合類別存放於 java.util 套件中,是用來存放物件的容器。

注意:①、集合只能存放物件。例如你存一個 int 型資料 1放入集合中,其實它是自動轉換成 Integer 類別後存入的,Java中每一種基本型別都有對應的參考型別。

   ②、集合存放的是多個物件的引用,物件本身還是放在堆記憶體中。

   ③、集合可以存放不同類型,不限數量的資料類型。

Java集合類別基本概念

在程式設計中,常常需要集中存放多個資料。從傳統意義上講,數組是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要保存的物件的數量。一旦在數組初始化時指定了這個數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的資料(在編譯時無法確定具體的數量),java的集合類別就是一個很好的設計方案了。

集合類別主要負責保存、盛裝其他數據,因此集合類別也被稱為容器類別。所以的集合類別都位於java.util套件下,後來為了處理多執行緒環境下的並發安全問題,java5也在java.util.concurrent套件下提供了一些多執行緒支援的集合類別。

在學習Java中的集合類別的API、程式設計原理的時候,我們一定要明白,"集合"是一個很古老的數學概念,它遠早於Java的出現。從數學概念的角度來理解集合能幫助我們更好的理解程式設計中何時該使用什麼類型的集合類別。

Java容器類別庫的用途是"保存物件",並將其劃分為兩個不同的概念:

1) Collection
一組"對立"的元素,通常這些元素都服從某種規則
  1.1) List必須保持元素特定的順序
  1.2) Set不能有重複元素
  1.3) Queue保持一個隊列(先進先出)的順序
2 ) Map
一組成對的"鍵值對"物件

1) Collection 每個位置只能保存一個元素(物件)
2) Map儲存的是"鍵值對",就像一個小型資料庫。我們可以透過"鍵"找到該鍵對應的"值"

Java集合類別架構層次關係

#

1. Interface Iterable
迭代器接口,這是Collection類別的父接口。實作這個Iterable介面的物件允許使用foreach進行遍歷,也就是說,所有的Collection集合物件都具有"foreach可遍歷性"。這個Iterable介面只
有一個方法: iterator()。它傳回一個代表目前集合物件的泛型迭代器,用於之後的遍歷運算
1.1 Collection
Collection是最基本的集合接口,一個Collection代表一組Object的集合,這些Object被稱為Collection的元素。 Collection是一個介面,用來提供規格定義,不能被實例化使用
    1) Set
    Set集合類似一個罐子,"丟進"Set集合裡的多個物件之間沒有明顯的順序。 Set繼承自Collection接口,不能包含有重複元素(記住,這是整個Set類別層次的共有屬性)。
    Set判斷兩個物件相同不是使用"=="運算符,而是根據equals方法。也就是說,我們在加入一個新元素的時候,如果這個新元素對象和Set中已有對象進行注意equals比較都返回false,  
   則Set就會接受這個新元素對象,否則拒絕。
    因為Set的這個限制,在使用Set集合的時候,應該注意兩點:1) 為Set集合裡的元素的實現類別實現一個有效的equals(Object)方法、2) 對Set的建構函數,傳入的Collection參數不能包
  含重複的元素
        1.1) HashSet
        HashSet是Set介面的典型實現,HashSet使用HASHOASH來查找記憶中的元件,因此具有良好的組合組件的典型實現,HashSet.性能。當HashSet集合存入一個元素時,HashSet會呼叫該物件的
     hashCode()方法來取得該物件的hashCode值,然後根據該HashCode值決定該物件在HashSet中的儲存位置。
        值得主要的是,HashSet集合判斷兩個元素相等的標準是兩個物件透過equals()方法比較相等,且兩個物件的hashCode()方法的回傳值相等
      
            LinkedHashSet集合也是依據元素的hashCode值來決定元素的儲存位置,但與HashSet不同的是,它同時使用鍊錶維護元素的次序,這樣使得元素看起來是以插入的順序保存的。
       當遍歷LinkedHashSet集合裡的元素時,LinkedHashSet將會依照元素的新增順序來存取集合裡的元素。
            LinkedHashSet需要一個受維護元素的插入順序,因此性能略低於HashSet的性能,但在迭代訪問Set裡的全部元素時(遍歷)將有很好的性能(鍊錶很適合進行遍歷)
  ) SortedSet    
        此介面主要用於排序作業,即實現此介面的子類別都屬於排序的子類別
           可以確保集合元素處於排序狀態
        1.3) EnumSet
        EnumSet是專為枚舉類別設計的集合類,EnumSet中所有元素都必須是指定枚舉類型的枚舉值,此枚舉類別設計式、或隱式地指定。 EnumSet的集合元素也是有順序的,
     它們以枚舉值在Enum類別內的定義順序來決定集合元素的順序
    2) List
    List集合代表一個元素有序、可重複的集合,集合中每個元素都有其對應的順序索引。 List集合允許加入重複元素,因為它可以透過索引來存取指定位置的集合元素。 List集合預設按元素
   的新增順序設定元素的索引
        2.1) ArrayList
        ArrayList是基於陣列實現的List類,它封裝了一個動態的成長的成長的數字。
        2.2) Vector
        Vector和ArrayList在用法上幾乎完全相同,但由於Vector是一個古老的集合,所以Vector提供了一些方法名很長的方法,但隨著JDK1.2以後,java提供了系統的集合框架,就將
     Vector改為實現List接口,統一歸入集合框架體系中
            2.2.1) Stack
#            Stack是Vector提供的子類別,用於模擬"堆疊"這種資料結構(LIFO後進先出)
        2.3) LinkedList      實作List接口,能對它進行佇列操作,也就是可以根據索引來隨機存取集合中的元素。同時它也實作Deque接口,即能將LinkedList當作雙端隊列
     使用。自然也可以當作"堆疊來使用"
    3) Queue
    Queue用來模擬"佇列"這種資料結構(先進先出 FIFO)。佇列的頭部保存著佇列中存放時間最長的元素,佇列的尾部保存著佇列中存放時間最短的元素。新元素插入(offer)到佇列的尾部,
   存取元素(poll)操作會傳回佇列頭部的元素,而佇列不允許隨機存取佇列中的元素。結合生活中常見的排隊會很好理解這個概念
        3.1) PriorityQueue
        PriorityQueue並不是一個比較標準的隊列實現,PriorityQueue元素的大小重新排序,這點從它的類別名稱也可以
     看出來
        3.2) Deque
        Deque介面代表一個"雙端佇列",雙端佇列可以同時從兩端添加佇列、刪除元素,因此Deque的實作類別既可以當成佇列使用、也可以當成棧使用
            3.2.1) ArrayDeque
       動態的、可重新分配的Object[]陣列來儲存集合元素,當集合元素超出該陣列的容量時,系統會在底層重
       新分配一個Object[]陣列來儲存集合元素來2) LinkedList
1.2 Map
Map用於保存具有"映射關係"的數據,因此Map集合裡保存著兩組值,一組值用於保存Map裡的key,另外一組值用於儲存Map裡的value。 key和value都可以是任何引用類型的資料。 Map的key不允
許重複,即同一個Map物件的任何兩個key透過equals方法比較結果總是回傳false。
關於Map,我們要從程式碼重複使用的角度去理解,java是先實作了Map,然後透過包裝了一個所有value都為null的Map就實現了Set集合
Map的這些實作類別和子介面中key集的儲存形式和Set集合完全相同(即key不能重複)
Map的這些實作類別和子介面中value集的儲存形式和List非常類似(即value可以重複、根據索引來尋找)
    1) HashMap
    和HashSet集合無法保證元素的順序一樣,HashMap也無法保證key-value對的順序。且類似HashSet判斷兩個key是否相等的標準也是: 兩個key透過equals()方法比較回傳true、
   同時兩個key的hashCode值也必須相等
        使用雙向鍊錶來維護key-value對的順序,該鍊錶負責維護Map的迭代順序,與key-value對的插入順序一致(注意和TreeMap對所有的key-value進行排序進行區
分)
    2) Hashtable
    是古老的Map實作類別
        2.1) Properties
        Properties屬性檔案關聯起來,因此可以把Map物件中的key-value對寫入到屬性文字
     件中,也可以將屬性檔案中的"屬性名稱-屬性值"載入到Map物件中
    3 ) SortedMap
    如同Set介面衍生出SortedSet子介面,SortedSet介面有一個TreeSet實作類別一樣,Map介面也衍生出一個SortedMap子接口,SortedMap介面也有一個TreeMap實作類別
    就是一個紅黑樹資料結構,每個key-value對即作為紅黑樹的一個節點。 TreeMap儲存key-value對(節點)時,需要依照key對節點進行排序。 TreeMap可以保證所有的
     key-value對處於有序狀態。同樣,TreeMap也有兩種排序方式: 自然排序、自訂排序
    4) WeakHashMap
    WeakHashMap與HashMap的用法大致相似。差別在於,HashMap的key保留了對實際物件的"強引用",這意味著只要該HashMap物件不被銷毀,該HashMap所引用的物件就不會被垃圾回收。
  但WeakHashMap的key只保留了對實際物件的弱引用,這意味著如果WeakHashMap物件的key所引用的物件沒有被其他強引用變數所引用,則這些key所引用的物件可能被垃圾回收,當該key所對應的實際物件後,WeakHashMap也可能自動刪除這些key所對應的key-value對
    5) IdentityHashMap
    IdentityHashMap的實作機制基本上與HashMap IdentityHashMap中,當且僅當兩個key嚴格相等(key1 == key2)時,IdentityHashMap才認為兩個key相等
    6) EnumMap
    EnumMap是與枚舉類別一起使用的Map實現,EnumMap中的所有key都必須是單一枚舉類別的枚舉值。建立EnumMap時必須明確或隱式指定它對應的枚舉類別。 EnumMap根據key的自然順序
  (即枚舉值在枚舉類別中的定義順序)

Java 集合框架圖

集合是什麼? Java集合的基本介紹(附框架圖)



## #############相關推薦:############ Java集合框架體系結構介紹###############Java核心技術點之集合架構的詳細介紹#######

以上是集合是什麼? Java集合的基本介紹(附框架圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用MapStruct簡化系統對接中的字段映射問題?如何使用MapStruct簡化系統對接中的字段映射問題?Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?Apr 19, 2025 pm 06:18 PM

IntelliJIDEA如何識別SpringBoot項目的端口號?在使用IntelliJIDEAUltimate版本啟動Spring...

高效編程:如何才能找到可靠的代碼工具和資源?高效編程:如何才能找到可靠的代碼工具和資源?Apr 19, 2025 pm 06:15 PM

高效編程:尋找可靠的代碼工具和資源很多程序員都渴望找到便捷的代碼工具網站,以提高效率,避免在海量信...

JWT能否實現動態權限變更?與Session機制有何區別?JWT能否實現動態權限變更?與Session機制有何區別?Apr 19, 2025 pm 06:12 PM

關於JWT和Session的困惑與解答許多初學者在學習JWT和Session時,常常會對其本質和適用場景感到困惑。本文將圍繞J...

Windows Server 2019防火牆如何正確配置才能支持WebSocket通信?Windows Server 2019防火牆如何正確配置才能支持WebSocket通信?Apr 19, 2025 pm 06:09 PM

WindowsServer2019防火牆與WebSocket通信問題詳解在使用SpringBoot開發的Jar程序部署於WindowsServer2019...

Spring Boot子線程如何訪問主線程的請求信息?Spring Boot子線程如何訪問主線程的請求信息?Apr 19, 2025 pm 06:03 PM

SpringBoot子線程無法訪問主線程Request信息解決方案在Spring...

Java單線程下的指令重排序會影響System.out.println的輸出順序嗎?Java單線程下的指令重排序會影響System.out.println的輸出順序嗎?Apr 19, 2025 pm 06:00 PM

Java單線程下的指令重排序與輸出順序在Java編程中,指令重排序是一個常見的優化技術,用於提高程序的執行效�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境