大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java編程技術分享,hashset方法原理

Java編程技術分享,hashset方法原理

更新時間:2020-05-26 16:20:17 來源:動力節點 瀏覽2218次

Java編程技術分享,hashset方法原理,HashMap作為底層數據結構實現的一種數據結構——HashSet。(如果不了解HashMap的實現原理,建議先看看HashMap,不然直接看HashSet是很難看懂的)。

1.HashSet定義

HashSet是一個由HashMap實現的集合。元素無序且不能重復。

?public?class?HashSet<E>
?????extends?AbstractSet<E>
?????implements?Set<E>,?Cloneable,?java.io.Serializable

Java編程技術分享,hashset方法原理

和前面介紹的大多數集合一樣,HashSet也實現了Cloneable接口和Serializable接口,分別用來支持克隆以及支持序列化。還實現了Set接口,該接口定義了Set集合類型的一套規范。

2.字段屬性

//HashSet集合中的內容是通過?HashMap?數據結構來存儲的
private?transient?HashMap<E,Object>?map;
//向HashSet中添加數據,數據在上面的?map?結構是作為?key?存在的,而value統一都是?PRESENT
private?static?final?Object?PRESENT?=?new?Object();

第一個定義一個HashMap,作為實現HashSet的數據結構;第二個PRESENT對象,因為前面講過HashMap是作為鍵值對key-value進行存儲的,而HashSet不是鍵值對,那么選擇HashMap作為實現,其原理就是存儲在HashSet中的數據作為Map的key,而Map的value統一為PRESENT(下面介紹具體實現時會了解)。

3.構造函數

1)無參構造

public?HashSet()?{
???map?=?new?HashMap<>();
?}

直接new一個HashMap對象出來,采用無參的HashMap構造函數,具有默認初始容量(16)和加載因子(0.75)。

2)指定初始容量

public?HashSet(int?initialCapacity)?{
????map?=?new?HashMap<>(initialCapacity);
?????????}

3)指定初始容量和加載因子

public?HashSet(int?initialCapacity,?float?loadFactor)?{
????map?=?new?HashMap<>(initialCapacity,?loadFactor);
??}

4)構造包含指定集合中的元素

public?HashSet(Collection<??extends?E>?c)?{
???map?=?new?HashMap<>(Math.max((int)?(c.size()/.75f)?+?1,?16));
???addAll(c);
?}

集合容量很好理解,這里我介紹一下什么是加載因子。在HashMap中,能夠存儲元素的數量就是:總的容量*加載因子,新增一個元素時,如果HashMap集合中的元素大于前面公式計算的結果了,那么就必須要進行擴容操作,從時間和空間考慮,加載因子一般都選默認的0.75。

4.添加元素

public?boolean?add(E?e)?{
???return?map.put(e,?PRESENT)==null;
??}

通過map.put()方法來添加元素,在上一篇博客介紹該方法時,說明了該方法如果新插入的key不存在,則返回null,如果新插入的key存在,則返回原key對應的value值(注意新插入的value會覆蓋原value值)。

也就是說HashSet的add(E e)方法,會將e作為key,PRESENT作為value插入到map集合中,如果e不存在,則插入成功返回true;如果存在,則返回false。

5.刪除元素

public?boolean?remove(Object?o)?{
?return?map.remove(o)==PRESENT;
}

調用HashMap的remove(Object o)方法,該方法會首先查找map集合中是否存在o,如果存在則刪除,并返回該值,如果不存在則返回null。

也就是說HashSet的remove(Object o)方法,刪除成功返回true,刪除的元素不存在會返回false。

6.查找元素

public?boolean?contains(Object?o)?{
return?map.containsKey(o);
?}

調用 HashMap 的 containsKey(Object o) 方法,找到了返回 true,找不到返回 false。

7.遍歷元素

HashSet<Integer>?set?=?new?HashSet<>();
set.add(1);
set.add(2);
//增強for循環
for(Integer?i?:?set){
??System.out.println(i);
}
//普通for循環
Iterator<Integer>?iterator?=?set.iterator();
while?(iterator.hasNext()){
????System.out.println(iterator.next());
}

以上就是動力節點java培訓機構的小編針對“Java編程技術分享,hashset方法原理”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产成人午夜片在线观看 | 久操视频网站 | 起碰成人免费公开网视频 | 色综合久久精品中文字幕首页 | 国产欧美精品专区一区二区 | 国产成+人+综合+亚洲 欧美 | 亚洲性夜夜综合久久麻豆 | 亚洲精品国产福利在线观看 | 久久国产一区二区 | 天天色综合图片 | h片在线免费观看 | 全亚洲最大的免费私人影剧院 | 亚洲一区二区三区免费在线观看 | 特黄特a级特别特级特毛片 特黄特黄aaaa级毛片免费看 | 日日夜夜摸摸 | 亚洲欧美综合国产精品一区 | 国产伦精品一区三区视频 | 松永纱奈在线观看 | 俄罗斯美女逼 | 精品国产麻豆 | 综合色伊人 | 久久99精品国产麻豆不卡 | 久久综合九色综合91 | 欧美中文在线观看 | 中国一级特黄aa毛片大片 | 午夜国产精品色福利视频 | 免费播放美女一级毛片 | 国产一区二区三区成人久久片 | 日本在线观看成人小视频 | 日本爽快片100色毛片 | 日韩高清在线播放不卡 | 成人毛片在线播放 | 国内自拍青青草 | 有码在线 | www男女| 久久色精品| 午夜视频在线网站 | 免费中文字幕在线观看 | 一区二区三区鲁丝不卡麻豆 | 亚洲精品色一区二区三区 | 欧洲美女bbbxxxxxx |