Java中的LinkedHashSet和TreeSet解讀
更新時(shí)間:2023年09月05日 09:35:22 作者:jtjeeeee
這篇文章主要介紹了Java中的LinkedHashSet和TreeSet解讀,哈希表和鏈表實(shí)現(xiàn)的set接口哈希表決定了它元素是唯一的,而鏈表則保證了他是有序的(存儲和取出順序一致),元素按照一定規(guī)則排序,不是按儲存時(shí)間排的,需要的朋友可以參考下
一,LinkedHashSet
- 哈希表和鏈表實(shí)現(xiàn)的set接口
- 哈希表決定了它元素是唯一的,而鏈表則保證了他是有序的(存儲和取出順序一致)
二,TreeSet
- 元素按照一定規(guī)則排序,不是按儲存時(shí)間排的
- 具體排序方法由構(gòu)造方法決定
- 無參構(gòu)造TreeSet()故居元素的自然排序進(jìn)行排序
- 沒有索引無法使用普通for循環(huán)進(jìn)行遍歷
- 也屬于set集合,沒有重復(fù)元素
三,排序
- 自然排序Comparable通過返回正負(fù)數(shù)和0判斷,返回正數(shù)說明前一個(gè)比將要儲存進(jìn)來的大,即放到前面
- 返回的是負(fù)數(shù)說明前一個(gè)比將要儲存進(jìn)來的小,就會放在后面,這樣就做到了從小到大排列
- 返回0他會以為元素一致而不存儲
- 利用以上規(guī)則,當(dāng)實(shí)現(xiàn)Comparable接口時(shí),可以重寫compareTo()方法,一我們想要的順序輸出
- 例如:按存儲時(shí)間直接return 1(正數(shù));,按時(shí)間的倒序return -1(負(fù)數(shù));
Comparator比較器
- 當(dāng)使用帶參構(gòu)造時(shí),需要傳Comparator接口(實(shí)際傳得應(yīng)該是他的實(shí)現(xiàn)類對象)
- 由于匿名內(nèi)部類就相當(dāng)于一個(gè)接口的實(shí)現(xiàn)類所以可以用匿名內(nèi)部類代替,否則需要寫一個(gè)接口實(shí)現(xiàn)類,然后創(chuàng)建它的對象傳進(jìn)去
- 最后用復(fù)雜一點(diǎn)的比較器練習(xí)一下
- Student類,當(dāng)使用無參構(gòu)造即自然排序時(shí)需要實(shí)現(xiàn)一下Comparable接口
public class Student {
public String name;
public int chinese;
public int math;
public Student(){}
public Student(String name,int chinese,int math){
this.chinese=chinese;
this.name=name;
this.math=math;
}
@Override
public String toString() {
return "名字:"+name+" "+"語文:"+chinese+" "+"數(shù)學(xué):"+math+"\t";
}
}測試類
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
// TreeSet的有參構(gòu)造,可以寫一個(gè)Comparabor的實(shí)現(xiàn)類然后創(chuàng)建對象傳進(jìn)來,也可以直接寫一個(gè)匿名內(nèi)部類,因?yàn)樗旧硐喈?dāng)于接口的一個(gè)實(shí)現(xiàn)對象
TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 按照成績總分從低到高排
int result=(o1.math+o1.chinese)-(o2.math+o2.chinese);
// 如果總分不同返回i是兩個(gè)學(xué)生對象總成績的差值,如果總分相同則按姓名排序(compareTo一樣的話說明姓名相同,說明兩個(gè)元素重復(fù),則不會添加進(jìn)去)
int i=result==0?o1.name.compareTo(o2.name):result;
return i;
}
});
Student s1=new Student("小明",88,99);
Student s2=new Student("小華",87,100);
Student s3=new Student("小天",86,94);
Student s4=new Student("小亮",83,89);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
System.out.println(ts);
}
}結(jié)果

到此這篇關(guān)于Java中的LinkedHashSet和TreeSet解讀的文章就介紹到這了,更多相關(guān)LinkedHashSet和TreeSet內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Minio實(shí)現(xiàn)圖片上傳功能
Minio是一款開源的對象存儲服務(wù)器,它提供了一個(gè)云原生的、高性能的、易于擴(kuò)展的文件系統(tǒng)接口,用于存儲和檢索任意大小的數(shù)據(jù),本文將給大家介紹SpringBoot整合Minio實(shí)現(xiàn)圖片上傳功能,需要的朋友可以參考下2024-08-08
SpringBoot 項(xiàng)目中的圖片處理策略之本地存儲與路徑映射
在SpringBoot項(xiàng)目中,靜態(tài)資源存放在static目錄下,使得前端可以通過URL來訪問這些資源,我們就需要將文件系統(tǒng)的文件路徑與URL建立一個(gè)映射關(guān)系,把文件系統(tǒng)中的文件當(dāng)成我們的靜態(tài)資源即可,本文給大家介紹SpringBoot本地存儲與路徑映射的相關(guān)知識,感興趣的朋友一起看看吧2023-12-12
IntelliJ IDEA里找不到j(luò)avax.servlet的jar包的解決方法
這篇文章主要介紹了IntelliJ IDEA里找不到j(luò)avax.servlet的jar包的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Springboot項(xiàng)目啟動優(yōu)化方式
文章詳細(xì)介紹了Spring Boot項(xiàng)目的啟動優(yōu)化策略,包括懶加載、異步初始化、精簡依賴、JVM優(yōu)化和使用Actuator監(jiān)控等方法,旨在提高項(xiàng)目的啟動速度和運(yùn)行性能2025-03-03
springboot+shiro+jwtsession和token進(jìn)行身份驗(yàn)證和授權(quán)
最近和別的軟件集成項(xiàng)目,需要提供給別人接口來進(jìn)行數(shù)據(jù)傳輸,發(fā)現(xiàn)給他token后并不能訪問我的接口,拿postman試了下還真是不行,檢查代碼發(fā)現(xiàn)項(xiàng)目的shiro配置是通過session會話來校驗(yàn)信息的,修改代碼兼容token和session2024-06-06

