HashSet
- 一、什麼是HashSet
- 二、HashSet的架構圖
- 三、代碼案例示範:
一、什麼是HashSet
Set集合常用的如:HashSet、TreeSet。HashSet是Set集合的典型實作,HashSet按照Hash算法來存儲集合中的元素,存在以下特點:
- HashSet 基于 HashMap 來實作的,是一個不允許有重複元素的集合。
- HashSet 允許有 null 值。
- HashSet 是無序的,即不會記錄插入的順序。
- HashSet 實作了 Set 接口。
HashSet 不是線程安全的, 如果多個線程嘗試同時修改 HashSet,則最終結果是不确定的。 您必須在多線程通路時顯式同步對 HashSet 的并發通路。
二、HashSet的架構圖
由圖可以做到
HashSet實作Set 的接口
HashSet 中的元素實際上是對象,一些常見的基本類型可以使用它的包裝類。
基本類型對應的包裝類表如下:
基本類型 | 引用類型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
三、代碼案例示範:
import java.util.HashSet;
/**
* @Description: HashSet的案例示範$
* @Author: dyq
* @Date: 2021年2月4日$
*/
public class HashSetTest {
public static void main(String[] args) {
//初始化一個HashSet
HashSet<String> seit = new HashSet<>();
//添加元素可以使用 add() 方法
seit.add("張三");
seit.add("李四");
seit.add("李四"); //李四 被添加了兩次,它在集合中也隻會出現一次,因為集合中的每個元素都必須是唯一的
seit.add("王五");
seit.add("劉六");
seit.add("黃七");
System.out.println(seit);
//使用 contains() 方法來判斷元素是否存在于集合當中
boolean a = seit.contains("劉六");
System.out.println("劉六是否在集合裡:" + a);
boolean b = seit.remove("李四"); // 删除元素,删除成功傳回 true,否則為 false
System.out.println("删除李四是否成功"+b +",集合為:"+seit);
//計算 HashSet 中的元素數量可以使用 size() 方法
int c = seit.size();
System.out.println("集合數量為:"+c);
// for-each 來疊代 HashSet 中的元素
System.out.println("for-each 來疊代 HashSet:");
for (String i : seit) {
System.out.println(i);
}
//删除集合中所有元素可以使用 clear 方法
seit.clear();
System.out.println("删除後集合為:"+seit); //删除後檢視集合還有沒有元素
}
}
結果:
[李四, 張三, 王五, 黃七, 劉六]
劉六是否在集合裡:true
删除李四是否成功true,集合為:[張三, 王五, 黃七, 劉六]
集合數量為:4
for-each 來疊代 HashSet:
張三
王五
黃七
劉六
删除後集合為:[]
其實HashSet就是基于Map方法來實作,我們可以看看他們的源碼,本質就是調用map的方法。