菜鳥程式設計師都能聽得懂得Java集合介紹,快來收藏

軟件編程指南 發佈 2020-02-12T18:15:30+00:00

2.Java中的具體體現集合類存放於 java.util 包中集合類型主要有3種:list 、set 。後面會詳細講解list 集合允許出現重複的元素Set 集合中元素不能是重複的map 是一個特殊集合容器,是有key-value組成的,我們也可以叫字典。


一、集合是什麼 ?

1. 集合知識概念

前面我們學習過了,Java中的基本類型,任何單一的數據都可以用基本類型來表達,這些單一的基本類型被統一的組合或者管理起來的就是集合,或者叫容器也可以。

舉例:

我們用數據來表示一個學校的存在。首先我們先來分析一波,學校的組成。

  • 學校的組成 = 班級的集合
  • 班級 = 學生的集合

前面我們說了,單一的數據類型都可以用基本類型來表示。那麼我們用 String 類型來表示學生的名字。

A班一共有3個學生(小明,小紅,小張)。那麼小明等人就可以用基本類型來表示,而A班就可以用集合來表示。 S學校一共有2個班級(A,B)。 因為A和B都是學生的集合,所以A、B都是集合。而S學校同樣是A、B的集合。


2. Java中的具體體現

  • 集合類存放於 java.util 包中
  • 集合類型主要有3種:list (列表)、set (集)、和 map (映射)。

後面會詳細講解

list 集合允許出現重複的元素Set 集合中元素不能是重複的map 是一個特殊集合容器,是有key-value組成的,我們也可以叫字典。因為它跟字典一樣,可以根據key,來找到對應的數據value。

二、用偽代碼構建一個學校

偽代碼展示


1. 定義A班級學生


2. 定義A班級並添加學生


3. 定義B班級學生


4. 定義B班級並添加學生



5. 定義學校並添加AB兩個班級


三、集合實現類及常用API ?

Java 集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合,另一種是Map,存儲鍵/值對映射。


1. Collection

Collection 接口又有 3 種子類型,List、Set 和 Queue。其中List和Set是最長用的。Queue相對來說用的比較少,作為入門基本學習前兩個已經夠用了。

因為List和Set都是實現自Collection,所以List和Set的API是一樣的,只要初學者記住Collection的常用方法和List和Set各個實現類的特點即可掌握。

List 和 Set 區別


List實現類特點


Set實現類特點


Collection常用API


總結

  • 安全的不高效,高效的不安全。要根據使用環境確定使用哪一個。
  • 一般開發中List基本都是 ArrayList,而 Set 使用 HashSet。


2. Map


Map是一種特殊的集合容器,它的數據結構是key-value的形式,類似於字典。Map的主要作用就是作為字典使用,通過key來查詢value比如上面的例子,就可以根據學生的名字,來找到學生具體所在的班級,我們對Map的學習主要學習其各個實現類的特點和常用API即可



實現類特點


Map集合常用API


四、 Java集合進階知識點

1.Map高級

這裡所說的高級,基本就是面試時候,面試官會經常考的知識點。

  • ①線程安全
  • ②哈希碰撞
  • ③加載因子
  • ④為什麼ConcurrentHashMap效率高並安全

① 線程安全

HashTable 是線程安全的,因為它的所有方法都被 synchronized修飾,所以安全,但是效率相對是低於 HashMap 的。 HashMap 雖然是線程不安全但是效率比較高。小編建議如果在不涉及多線程操作的情況下,建議使用HashMap。 那麼什麼情況是不涉及多線程呢? 最簡單的場景就是在只需要在方法中使用的時候可以用HashMap。但是凡事要作為對象的實例變量的情況下,一定就不能使用HashMap。因為它線程不安全。建議使用ConcurrentHashMap

②哈希碰撞

什麼是哈希碰撞,前面說了凡事Hash開頭的Map實現類,底層都是使用Hash來實現的,即將Key通過hash算法得到一個位置,然後在該位置上存儲value。但是假如key1和key2通過算法得到的位置是一樣的,即說明出現了hash碰撞的場景。那麼如何避免哈希膨脹呢? 答案就是擴容,默認當HashMap中的鍵值對達到數組大小的75%時,即會觸發擴容。通過擴容的方式來避免哈希碰撞


③加載因子


前面說哈希碰撞時候,解決方案就是擴容,那麼如何知道要擴容呢? 默認當Hash達到75%時候就擴容,這個75%就叫做加載因子。

④為什麼ConcurrentHashMap效率高並安全

Hashtable的synchronized是針對整張Hash表的,即每次鎖住整張表讓線程獨占,ConcurrentHashMap允許多個修改操作並發進行,其關鍵在於使用了鎖分離技術。通過把整個Map分為N個Segment,可以提供相同的線程安全,但是效率提升N倍,默認提升16倍。(讀操作不加鎖,由於HashEntry的value變量是 volatile的,也能保證讀取到最新的值。)

面試時候可以簡單回答: 每一個Segment相當於HashTable,假如Map分成了N個分段,一般情況如果並發的數量小於N都不會出現鎖阻斷情況,但是當並發數大於N時候,同樣會有性能為題,ConcurrentHashMap相當於HashTable和HashMap的一個這種方案。


五、哪些場景需要使用到集合 ?

作為初學者,往往不知道學習的這些東西,到底有什麼用處。在此小編簡單描述下。

1. 需要批量操作使用List



2. Map作為字典使用

根據Map的key和value的數據結構,可以將key設置成查詢條件,然後找到對應的value。


關鍵字: