JDK原始碼之HashSet

2022-09-06 05:24:10 字數 1764 閱讀 3105

1.定義

hashset繼承abstractset類,實現set,cloneable,serializable介面。set 介面是一種不包括重複元素的 collection,它維持它自己的內部排序,所以隨機訪問沒有任何意義。

public class hashsetextends abstractsetimplements set, cloneable, j**a.io.serializable

hashset的底層是靠hashmap進行儲存的,map中的key值中儲存著set集合中的元素,不允許重複,而value值則使用present進行填充。

private transient hashmapmap;

// 定義乙個object物件作為hashmap的value值

private static final object present = new object();

hashset的建構函式

//構造乙個全新空的set,預設大小是16,預設裝載因子是0.75 

public hashset()

//構造乙個包含指定集合中元素的新集合,使用預設的構造因子0.75,如果集合中的元素太少,就採用預設大小16

//如果collection為空,則丟擲空指標異常

public hashset(collection<? extends e> c)

//構造乙個具有指定初始大小和裝載因子的hashset

public hashset(int initialcapacity, float loadfactor)

//構造乙個指定初始大小和預設裝載因子為0.75的hashset

public hashset(int initialcapacity)

//該建構函式為此包私有,僅僅由子類linkedhashset使用,構造乙個新的空鏈結雜湊集合

//且指定大小和建構函式

hashset(int initialcapacity, float loadfactor, boolean dummy)

2.主要方法

因為hashset是基於hashmap進行實現的,所以hashset的方法實現比較簡單,直接呼叫map的函式即可。

//返回元素迭代器,元素以無特定順序返回

public iteratoriterator()

//返回set大小

public int size()

//返回set中是否為空

public boolean isempty()

//返回集合中是否包含該元素

public boolean contains(object o)

//新增元素到集合中,如果集合不包含該元素,則新增。如果包含,則集合保持不變並且返回。

//此時map中新增的value值是present,該物件是static final物件

public boolean add(e e)

//如果集合包含該元素,則刪除元素

public boolean remove(object o)

//清空set

public void clear()

//clone函式是淺複製,並沒有複製元素本身

@suppresswarnings("unchecked")

public object clone() catch (clonenotsupportedexception e)

}

HashSet原始碼解析 JDK1 8

在我們學過hashmap之後,再來看hashset就很easy了。因為hashset是基於hashmap是實現的。開啟hashset的原始碼,可以看到維護了乙個hashmap 一 成員變數 用來儲存 hashset 的元素private transient hashmap,object map 這個...

JDK14 0 1 HashSet原始碼總結

目錄 1.概述 2.屬性 3.構造方法 4.相關操作 4.1新增元素 4.2移除元素 4.3遍歷 判空 包含 5.轉殖機制 淺拷貝 6.序列化機制 7.去重機制 此類實現set介面,該介面由雜湊表 實際上是hashmap例項 支援。其依靠hashmap的key不可重複,來保證將來加入到hashset...

Java原始碼分析之HashSet

hashset的本質,其實就是hashmap private transient hashmapmap hashmap是鍵值對,而hashset是單值,所以需要乙個值來充當鍵值對中的值 private static final object present new object public has...