欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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接口中元素無序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復。

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

HashSet集合介紹

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

HashSet是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于: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)類是一個無序并且不重復的類。

HashSet集合存儲數據的結構(哈希表)

什么是哈希表呢?

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

LinkedHashSet

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

在HashSet下面有一個子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個數據存儲結構。

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());
		}
	}
}

結果:

bbb
aaa
abc
bbc

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

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

相關文章

  • SpringBoot中引入MyBatisPlus的常規(guī)操作

    SpringBoot中引入MyBatisPlus的常規(guī)操作

    這篇文章主要介紹了SpringBoot中引入MyBatisPlus的常規(guī)操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • java中List接口與實現(xiàn)類介紹

    java中List接口與實現(xiàn)類介紹

    大家好,本篇文章主要講的是java中List接口與實現(xiàn)類介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • springboot配置文件使用方式

    springboot配置文件使用方式

    文章介紹了將參數配置在配置文件中的方法,包括使用@Component和@Value注解進行外部配置的屬性注入,以及使用@ConfigurationProperties簡化配置,文章還提供了YAML格式配置文件的語法和特點,并強調了集中管理和維護配置參數的重要性
    2024-11-11
  • java 字符串截取的三種方法(推薦)

    java 字符串截取的三種方法(推薦)

    下面小編就為大家?guī)硪黄猨ava 字符串截取的三種方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 詳解java jinfo命令

    詳解java jinfo命令

    jinfo是jdk自帶的命令,用來查看jvm的配置參數.通常會先使用jps查看java進程的id,然后使用jinfo查看指定pid的jvm信息,需要的朋友可以參考下
    2021-06-06
  • mybatis主表與明細表一對多的同時插入操作方法

    mybatis主表與明細表一對多的同時插入操作方法

    對主表(采購申請表)和明細表(申請物資表)同時進行插入操作insert,怎么實現(xiàn)呢,下面給大家分享mybatis主表與明細表一對多的同時插入操作方法,感興趣的朋友一起看看吧
    2023-02-02
  • java整合onlyoffice的各種踩坑記錄

    java整合onlyoffice的各種踩坑記錄

    這篇文章主要給大家介紹了關于java整合onlyoffice的各種踩坑,OnlyOffice是一種強大的在線協(xié)作軟件,專為企業(yè)和個人設計,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Springboot 整合 Dubbo/ZooKeeper 實現(xiàn) SOA 案例解析

    Springboot 整合 Dubbo/ZooKeeper 實現(xiàn) SOA 案例解析

    這篇文章主要介紹了Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例,需要的朋友可以參考下
    2017-11-11
  • java Matcher匹配頭尾截取替換字符串的案例

    java Matcher匹配頭尾截取替換字符串的案例

    這篇文章主要介紹了java Matcher匹配頭尾截取替換字符串的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Spring Security架構以及源碼詳析

    Spring Security架構以及源碼詳析

    這篇文章主要給大家介紹了關于Spring Security架構以及源碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06

最新評論