亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解讀Java中Set真的是無序的嗎

 更新時間:2023年07月11日 17:14:05   作者:bingoCoder  
這篇文章主要介紹了Java中Set是不是無序的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java Set是無序的嗎

我們經(jīng)常聽說List是有序且可重復的,Set是無序且不重復的。

這是一個誤區(qū),這里所說的順序有兩個概念

  • 一是按照添加的順序排列
  • 二是按,照自然順序a-z排列

Set并不是無序的傳統(tǒng)所說的Set無序指的是HashSet,它不能保證元素的添加順序,更不能保證自然順序,而Set的其他實現(xiàn)類是可以實現(xiàn)這兩種順序的。

  • LinkedHashset : 保證元素添加的自然順序
  • TreeSet : 保證元素的自然順序

通過下面一段代碼來理解上述問題

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class Prectice {
	public static void main(String[] args) {
		Set<String> set = new HashSet<>();
		set.add("String1");
		set.add("String4");
		set.add("String3");
		set.add("String2");
		set.add("String5");
		set.forEach(e-> System.out.print(e+" "));
		System.out.println();
		//LinkedHashSet會保證元素的添加順序
		Set<String> set2 = new LinkedHashSet<>();
		set2.add("String1");
		set2.add("String5");
		set2.add("String3");
		set2.add("String4");
		set2.add("String2");
		set2.forEach(e-> System.out.print(e+" "));
		System.out.println();
		//TreeSet保證元素自然順序
		Set<String> set3 = new TreeSet<>();
		set3.add("String1");
		set3.add("String5");
		set3.add("String4");
		set3.add("String2");
		set3.add("String3");
		set3.forEach(e-> System.out.print(e+" "));
	}
}

輸出結果:

String5 String4 String3 String2 String1       HashSet元素亂序
String1 String5 String3 String4 String2       LinkedHashSet保證元素添加順序

String1 String2 String3 String4 String5       TreeSet元素按自然順序排序

java中set集合:有序set集合,集合中的對象存儲注意事項

1、LinkedHashSet(有序)

通過鏈表的形式保證有序;

2、TreeSet(有序)

可以使用比較器:Comparable(內(nèi)部)與Comparator(外部),通過Collections.sort()進行排序;

內(nèi)部比較器-對應類上面實現(xiàn)comparable的接口,重寫compare的方法;

例如:

Collections.sort(set);

外部比較器--對應類上面,編寫內(nèi)部靜態(tài)類-比較器,實現(xiàn)對應的comparator接口;

例如:

Collections.sort(set, new AscAgeComparator());

3、set集合中保存對象的時候

去重,要重寫對象的hashcode()和equals()方法,原始set的數(shù)據(jù)結構,在取數(shù)的時候,

先取hashcode,如果有多個hashcode相等的值,進一步比較equals的函數(shù)值,取出對應節(jié)點的數(shù)據(jù);

參與計算hashcode的屬性值,不要變動,變動會造成hashcode的變化,造成保存數(shù)據(jù)不可被重新指向,產(chǎn)生垃圾數(shù)據(jù),甚至OOM;

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 解讀file.exists(),file.isFile()和file.isDirectory()的區(qū)別

    解讀file.exists(),file.isFile()和file.isDirectory()的區(qū)別

    本文介紹了Java中的File類的三個方法:file.exists()、file.isFile()和file.isDirectory(),并詳細解釋了它們的區(qū)別和使用場景
    2025-02-02
  • Spring聲明式事務@Transactional注解實現(xiàn)元數(shù)據(jù)驅動的事務管理

    Spring聲明式事務@Transactional注解實現(xiàn)元數(shù)據(jù)驅動的事務管理

    這篇文章主要為大家介紹了Spring聲明式事務@Transactional注解實現(xiàn)元數(shù)據(jù)驅動的事務管理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 四個Java必須知道的負載均衡算法分享

    四個Java必須知道的負載均衡算法分享

    我們在設計系統(tǒng)的時候,為了系統(tǒng)的高擴展性,會創(chuàng)建無狀態(tài)的系統(tǒng)。但是,要使系統(tǒng)具有更好的可擴展性,除了無狀態(tài)設計之外,還要考慮采用什么負載均衡算法,本文就帶領大家認識以下常見的4種負載均衡算法
    2023-01-01
  • Spring中的攔截器HandlerInterceptor詳細解析

    Spring中的攔截器HandlerInterceptor詳細解析

    這篇文章主要介紹了Spring中的攔截器HandlerInterceptor詳細解析,HandlerInterceptor 是 Spring 框架提供的一個攔截器接口,用于在請求處理過程中攔截和處理請求,需要的朋友可以參考下
    2024-01-01
  • 使用Java在線生成pdf文檔的代碼實現(xiàn)

    使用Java在線生成pdf文檔的代碼實現(xiàn)

    在實際的業(yè)務開發(fā)的時候,研發(fā)人員往往會碰到很多這樣的一些場景,需要提供相關的電子憑證信息給用戶,熟悉這塊業(yè)務的童鞋,一定特別清楚,目前最常用的解決方案通過一些技術手段生成對應的PDF文件,下面小編給大家詳細說說
    2025-04-04
  • JAVA 并發(fā)容器的一些易出錯點你知道嗎

    JAVA 并發(fā)容器的一些易出錯點你知道嗎

    今天給大家?guī)淼奈恼率荍ava并發(fā)編程的相關知識,文中對java同步容器與并發(fā)容器做了非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-09-09
  • JAVA實現(xiàn)心跳檢測(長連接)

    JAVA實現(xiàn)心跳檢測(長連接)

    本文主要介紹了JAVA實現(xiàn)心跳檢測(長連接),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • SpringBoot集成WebServlet出現(xiàn)自定義servlet請求失敗的問題解決方案

    SpringBoot集成WebServlet出現(xiàn)自定義servlet請求失敗的問題解決方案

    SpringBoot中以Bean方式注冊Servlet時遇到的問題,通過了解DispatcherServlet的原理,發(fā)現(xiàn)默認路徑?jīng)_突是主要原因,本文介紹SpringBoot集成WebServlet出現(xiàn)自定義servlet請求失敗的問題解決方案,感興趣的朋友一起看看吧
    2025-03-03
  • Java8不可或缺小幫手之日期應用

    Java8不可或缺小幫手之日期應用

    jdk1.8后引入了新的日期時間處理API,相比傳統(tǒng)的date操作更加簡便,date中的SimpleDateFormat也是非線程安全的,廢話不多說,開干
    2023-05-05
  • Java正則表達式判斷字符串中是否包含中文示例

    Java正則表達式判斷字符串中是否包含中文示例

    之前一個朋友問我,如何判斷字符串中是否包含中文,其實解決的方法很簡單,但覺著有必要寫出給不知道的朋友們以參考,所以下面這篇文章主要介紹了利用Java正則表達式判斷字符串中是否包含中文的方法,需要的朋友可以參考。
    2017-03-03

最新評論