Java中的LinkedHashSet和TreeSet解讀
更新時(shí)間:2023年09月05日 09:35:22 作者:jtjeeeee
這篇文章主要介紹了Java中的LinkedHashSet和TreeSet解讀,哈希表和鏈表實(shí)現(xiàn)的set接口哈希表決定了它元素是唯一的,而鏈表則保證了他是有序的(存儲(chǔ)和取出順序一致),元素按照一定規(guī)則排序,不是按儲(chǔ)存時(shí)間排的,需要的朋友可以參考下
一,LinkedHashSet
- 哈希表和鏈表實(shí)現(xiàn)的set接口
- 哈希表決定了它元素是唯一的,而鏈表則保證了他是有序的(存儲(chǔ)和取出順序一致)
二,TreeSet
- 元素按照一定規(guī)則排序,不是按儲(chǔ)存時(shí)間排的
- 具體排序方法由構(gòu)造方法決定
- 無(wú)參構(gòu)造TreeSet()故居元素的自然排序進(jìn)行排序
- 沒(méi)有索引無(wú)法使用普通for循環(huán)進(jìn)行遍歷
- 也屬于set集合,沒(méi)有重復(fù)元素
三,排序
- 自然排序Comparable通過(guò)返回正負(fù)數(shù)和0判斷,返回正數(shù)說(shuō)明前一個(gè)比將要儲(chǔ)存進(jìn)來(lái)的大,即放到前面
- 返回的是負(fù)數(shù)說(shuō)明前一個(gè)比將要儲(chǔ)存進(jìn)來(lái)的小,就會(huì)放在后面,這樣就做到了從小到大排列
- 返回0他會(huì)以為元素一致而不存儲(chǔ)
- 利用以上規(guī)則,當(dāng)實(shí)現(xiàn)Comparable接口時(shí),可以重寫compareTo()方法,一我們想要的順序輸出
- 例如:按存儲(chǔ)時(shí)間直接return 1(正數(shù));,按時(shí)間的倒序return -1(負(fù)數(shù));
Comparator比較器
- 當(dāng)使用帶參構(gòu)造時(shí),需要傳Comparator接口(實(shí)際傳得應(yīng)該是他的實(shí)現(xiàn)類對(duì)象)
- 由于匿名內(nèi)部類就相當(dāng)于一個(gè)接口的實(shí)現(xiàn)類所以可以用匿名內(nèi)部類代替,否則需要寫一個(gè)接口實(shí)現(xiàn)類,然后創(chuàng)建它的對(duì)象傳進(jìn)去
- 最后用復(fù)雜一點(diǎn)的比較器練習(xí)一下
- Student類,當(dāng)使用無(wú)參構(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+" "+"語(yǔ)文:"+chinese+" "+"數(shù)學(xué):"+math+"\t"; } }
測(cè)試類
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)建對(duì)象傳進(jìn)來(lái),也可以直接寫一個(gè)匿名內(nèi)部類,因?yàn)樗旧硐喈?dāng)于接口的一個(gè)實(shí)現(xiàn)對(duì)象 TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { // 按照成績(jī)總分從低到高排 int result=(o1.math+o1.chinese)-(o2.math+o2.chinese); // 如果總分不同返回i是兩個(gè)學(xué)生對(duì)象總成績(jī)的差值,如果總分相同則按姓名排序(compareTo一樣的話說(shuō)明姓名相同,說(shuō)明兩個(gè)元素重復(fù),則不會(huì)添加進(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于ConditionalOnMissingBean失效問(wèn)題的追蹤
這篇文章主要介紹了關(guān)于ConditionalOnMissingBean失效問(wèn)題的追蹤方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03java token生成和校驗(yàn)的實(shí)例代碼
這篇文章主要介紹了java token生成和校驗(yàn)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)?lái)一篇mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用
Drools?就是一個(gè)開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來(lái)和大家詳細(xì)聊聊Drools的具體應(yīng)用,需要的可以參考一下2023-03-03Java中float類型的范圍及其與十六進(jìn)制的轉(zhuǎn)換例子
這篇文章主要介紹了Java中float類型的范圍及其與十六進(jìn)制的轉(zhuǎn)換例子,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10