摘要:內部是利用實現的,將值存在的上這也是為什么不允許存取重復值得原因。數據結構與支持映射中的對象關聯的虛擬值中的,只是一個無意義的空對象默認的構造函數查詢內容的時候實際是在中查詢增加的時候,在的位置放置要存的值,在中放置一個沒有意義的空對象
hashSet內部是利用hashMap實現的,將值存在hashmap的key上這也是為什么hashset不允許存取重復值得原因。
數據結構
private transient HashMapmap; // 與支持映射中的對象關聯的虛擬值 ,map中的value,只是一個無意義的空對象 private static final Object PRESENT = new Object();
默認的構造函數
public HashSet() { map = new HashMap<>(); }
查詢內容的時候實際是在map中查詢key
public boolean contains(Object o) { return map.containsKey(o); }
增加的時候,在key的位置放置要存的值,在value中放置一個沒有意義的空對象
public boolean add(E e) { return map.put(e, PRESENT)==null; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72855.html
摘要:簡介繼續分析源碼,上一篇文章把的分析完畢。本文開始分析簡單的介紹一下。存儲的元素是無序的并且允許使用空的元素。 1.簡介 繼續分析源碼,上一篇文章把HashMap的分析完畢。本文開始分析HashSet簡單的介紹一下。 HashSet是一個無重復元素集合,內部使用HashMap實現,所以HashMap的特征耶繼承了下來。存儲的元素是無序的并且HashSet允許使用空的元素。 HashSe...
摘要:到此發現,實際上可以拆分成跟指的是,則是指實現了接口,這樣看來,的實現其實就比較簡單了,下面開始分析源碼。 概述 在分析HashSet源碼前,先看看HashSet的繼承關系 showImg(https://segmentfault.com/img/bVWo4W?w=605&h=425); HashSet繼承關系從上圖可以看出,HashSet繼承自AbstractSet,實現了Set接口...
摘要:源碼分析屬性內部使用虛擬對象,用來作為放到中構造方法非,主要是給使用的構造方法都是調用對應的構造方法。遍歷元素直接調用的的迭代器。什么是機制是集合中的一種錯誤機制。當使用迭代器迭代時,如果發現集合有修改,則快速失敗做出響應,拋出異常。 簡介 集合,這個概念有點模糊。 廣義上來講,java中的集合是指java.util包下面的容器類,包括和Collection及Map相關的所有類。 中...
摘要:就有這個功能,它是怎么實現有序的呢源碼分析繼承自,讓我們直接上源碼來看看它們有什么不同。是有序的,它是按照插入的順序排序的。所以,是不支持按訪問順序對元素排序的,只能按插入順序排序。 介紹 上一節我們說HashSet中的元素是無序的,那么有沒有什么辦法保證Set中的元素是有序的呢? 答案是當然可以。 LinkedHashSet就有這個功能,它是怎么實現有序的呢? 源碼分析 Linked...
摘要:下面總結一下集合常用的三個子類吧無序,允許為,底層是散列表紅黑樹,非線程同步有序,不允許為,底層是紅黑樹非線程同步迭代有序,允許為,底層是雙向鏈表,非線程同步從結論而言我們就可以根據自己的實際情況來使用了。 前言 聲明,本文用的是jdk1.8 前面章節回顧: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、散列表、紅黑樹介紹 HashMap就是這么簡單【源碼...
閱讀 3882·2021-09-10 11:22
閱讀 2348·2021-09-03 10:30
閱讀 3669·2019-08-30 15:55
閱讀 1901·2019-08-30 15:44
閱讀 849·2019-08-30 15:44
閱讀 594·2019-08-30 14:04
閱讀 3048·2019-08-29 17:18
閱讀 1272·2019-08-29 15:04