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

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

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

Java Set是無序的嗎

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

這是一個誤區(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+" "));
	}
}

輸出結(jié)果:

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()進(jìn)行排序;

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

例如:

Collections.sort(set);

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

例如:

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java高效實現(xiàn)PDF與OFD的相互轉(zhuǎn)換的示例代碼

    Java高效實現(xiàn)PDF與OFD的相互轉(zhuǎn)換的示例代碼

    在數(shù)字化辦公日益普及的今天,文檔格式的標(biāo)準(zhǔn)化與跨平臺兼容性成為企業(yè)和開發(fā)者面臨的重要挑戰(zhàn),OFD作為國家標(biāo)準(zhǔn),在政務(wù)、金融等領(lǐng)域具有不可替代的地位,而PDF則以其廣泛的兼容性成為日常交流的首選本文將深入探討如何高效地實現(xiàn)PDF與OFD的相互轉(zhuǎn)換
    2025-10-10
  • MyBatis Plus工具快速入門使用教程

    MyBatis Plus工具快速入門使用教程

    這篇文章主要介紹了MyBatis Plus工具快速入門使用教程,需要的朋友可以參考下
    2018-05-05
  • Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原因分析

    Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原

    這篇文章主要介紹了Spring Boot 2.4配置特定環(huán)境時spring: profiles提示被棄用的原因,本文給大家分享詳細(xì)解決方案,需要的朋友可以參考下
    2023-04-04
  • Java中List與Map初始化的一些寫法分享

    Java中List與Map初始化的一些寫法分享

    這篇文章主要介紹了Java中List與Map初始化的一些寫法有需要的朋友可以參考一下
    2014-01-01
  • Springboot實現(xiàn)緩存預(yù)熱的方法

    Springboot實現(xiàn)緩存預(yù)熱的方法

    在系統(tǒng)啟動之前通過預(yù)先將常用數(shù)據(jù)加載到緩存中,以提高緩存命中率和系統(tǒng)性能的過程,緩存預(yù)熱的目的是盡可能地避免緩存擊穿和緩存雪崩,這篇文章主要介紹了Springboot實現(xiàn)緩存預(yù)熱,需要的朋友可以參考下
    2024-03-03
  • Mybatis如何使用注解優(yōu)化代碼

    Mybatis如何使用注解優(yōu)化代碼

    這篇文章主要介紹了Mybatis如何使用注解優(yōu)化代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Springboot Thymeleaf數(shù)字對象使用方法

    Springboot Thymeleaf數(shù)字對象使用方法

    這篇文章主要介紹了Springboot Thymeleaf數(shù)字對象使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2007-09-09
  • java操作hdfs的方法示例代碼

    java操作hdfs的方法示例代碼

    這篇文章主要介紹了java操作hdfs的相關(guān)資料,在本地配置Hadoop和Maven的環(huán)境變量,首先需從官網(wǎng)下載與服務(wù)器相同版本的Hadoop安裝包,配置環(huán)境變量后,引入Maven的配置文件,以便管理項目依賴,最后,編寫代碼實現(xiàn)對HDFS的連接和操作,完成數(shù)據(jù)的讀寫,需要的朋友可以參考下
    2022-02-02
  • Spring事務(wù)處理流程和原理詳解

    Spring事務(wù)處理流程和原理詳解

    這篇文章主要介紹了Spring事務(wù)處理流程和原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot異步處理的四種實現(xiàn)方式

    SpringBoot異步處理的四種實現(xiàn)方式

    本篇文章我們以SpringBoot中異步的使用(包括:異步調(diào)用和異步方法兩個維度)來進(jìn)行講解,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論

花莲市| 安塞县| 三门峡市| 贵南县| 桐梓县| 利津县| 阳西县| 九寨沟县| 泸西县| 贵德县| 满洲里市| 阿拉尔市| 临武县| 密云县| 漠河县| 来宾市| 临漳县| 梧州市| 喀什市| 黄大仙区| 洪湖市| 河间市| 池州市| 临邑县| 博爱县| 南陵县| 沛县| 新沂市| 会昌县| 承德县| 商河县| 雷州市| 绥棱县| 安陆市| 上高县| 玉林市| 临武县| 兴海县| 临潭县| 临高县| 政和县|