最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Set接口實現(xiàn)類HashSet和LinkedHashSet詳解

 更新時間:2024年01月05日 10:07:17   作者:時間不會賴著不走  
這篇文章主要介紹了Java中的Set接口實現(xiàn)類HashSet和LinkedHashSet詳解,Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了,需要的朋友可以參考下

Set接口

java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。

與List接口不同的是,Set接口中元素?zé)o序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。

Set集合有多個子類,這里我們介紹其中的java.util.HashSet、java.util.LinkedHashSet這兩個集合。

HashSet集合介紹

java.util.HashSet是Set接口的一個實現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的(即存取順序不一致)。java.util.HashSet底層的實現(xiàn)其實是一個java.util.HashMap支持.

HashSet是根據(jù)對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashCode與equals方法。

public class test {

    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("cba");
        set.add("cba");
        set.add("cbc");
        set.add("cbd");
        System.out.println(set);
    }
}

代碼輸出:

在這里插入圖片描述

說明HashSet實現(xiàn)類是一個無序并且不重復(fù)的類。

HashSet集合存儲數(shù)據(jù)的結(jié)構(gòu)(哈希表)

什么是哈希表呢?

JDK1.8之前,哈希表底層采用數(shù)組+鏈表實現(xiàn),即使用鏈表處理沖突,同一hash值的鏈表都存儲在一個鏈表里。但是當(dāng)位于一個桶中的元素較多,即hash值相等的元素較多時,通過key值依次查找的效率較低。而JDK1.8中,哈希表存儲采用數(shù)組+鏈表+紅黑樹實現(xiàn),當(dāng)鏈表長度超過閾值(8)時,將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時間。

簡單的來說,哈希表是由數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現(xiàn)的,如下圖所示。

在這里插入圖片描述

看到這張圖就有人要問了,這個是怎么存儲的呢?

為了方便大家的理解我們結(jié)合一個存儲流程圖來說明一下:

在這里插入圖片描述

總而言之,JDK1.8引入紅黑樹大程度優(yōu)化了HashMap的性能,那么對于我們來講保證HashSet集合元素的唯一,其實就是根據(jù)對象的hashCode和equals方法來決定的。

如果我們往集合中存放自定義的對象,那么保證其唯一,就必須復(fù)寫hashCode和equals方法建立屬于當(dāng)前對象的比較方式。

LinkedHashSet

我們知道HashSet保證元素唯一,可是元素存放進去是沒有順序的,那么我們要保證有序,怎么辦呢?

在HashSet下面有一個子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個數(shù)據(jù)存儲結(jié)構(gòu)。

public class LinkedHashSetDemo {
	public static void main(String[] args) {
		Set<String> set = new LinkedHashSet<String>();
		set.add("bbb");
		set.add("aaa");
		set.add("abc");
		set.add("bbc");
        Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

結(jié)果:

bbb
aaa
abc
bbc

LinkedHashSet特點就是里面的元素有序,不重復(fù)。

到此這篇關(guān)于Java中的Set接口實現(xiàn)類HashSet和LinkedHashSet詳解的文章就介紹到這了,更多相關(guān)Set接口實現(xiàn)類詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 客戶端操作 FastDFS 實現(xiàn)文件上傳下載替換刪除功能

    Java 客戶端操作 FastDFS 實現(xiàn)文件上傳下載替換刪除功能

    這篇文章主要介紹了Java 客戶端操作 FastDFS 實現(xiàn)文件上傳下載替換刪除功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • springboot -sse -flux 服務(wù)器推送消息的方法

    springboot -sse -flux 服務(wù)器推送消息的方法

    這篇文章主要介紹了springboot -sse -flux 服務(wù)器推送消息的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • IDEA部署jeesite3完美運行教程詳解

    IDEA部署jeesite3完美運行教程詳解

    這篇文章主要介紹了IDEA部署jeesite3完美運行教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java網(wǎng)絡(luò)通信中ServerSocket的設(shè)計優(yōu)化方案

    Java網(wǎng)絡(luò)通信中ServerSocket的設(shè)計優(yōu)化方案

    今天小編就為大家分享一篇關(guān)于Java網(wǎng)絡(luò)通信中ServerSocket的設(shè)計優(yōu)化方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 淺談Java StringBuilder為什么線程不安全

    淺談Java StringBuilder為什么線程不安全

    這篇文章主要介紹了淺談Java StringBuilder為什么線程不安全,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一文詳解Java中流程控制語句

    一文詳解Java中流程控制語句

    在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。也就是說,程序的流程對運行結(jié)果有直接的影響。所以,我們必須清楚每條語句的執(zhí)行流程。本文就來通過一些示例帶大家詳細了解一下
    2022-10-10
  • Maven項目無法加載jdbc.properties的問題解決

    Maven項目無法加載jdbc.properties的問題解決

    本文主要介紹了Maven項目無法加載jdbc.properties的問題解決,文章首先分析了問題的原因,然后提供了解決方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Driver問題

    如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Dr

    這篇文章主要介紹了如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Driver問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot配置GlobalExceptionHandler全局異常處理器案例

    SpringBoot配置GlobalExceptionHandler全局異常處理器案例

    這篇文章主要介紹了SpringBoot配置GlobalExceptionHandler全局異常處理器案例,通過簡要的文章說明如何去進行配置以及使用,需要的朋友可以參考下
    2021-06-06
  • SQLSyntaxErrorException-ExecutorException報錯解決分析

    SQLSyntaxErrorException-ExecutorException報錯解決分析

    這篇文章主要為大家介紹了SQLSyntaxErrorException-ExecutorException報錯解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論

田阳县| 肃宁县| 黄石市| 砚山县| 攀枝花市| 日照市| 凉山| 泾川县| 惠州市| 灌阳县| 宜城市| 夏津县| 湄潭县| 胶州市| 宣武区| 恭城| 周至县| 分宜县| 嘉黎县| 龙口市| 五家渠市| 邛崃市| 会理县| 兰坪| 寿阳县| 乐安县| 洪雅县| 高青县| 沙河市| 丰宁| 西盟| 黔东| 呼图壁县| 荥阳市| 嫩江县| 建平县| 琼结县| 崇阳县| 建湖县| 临洮县| 集贤县|