Java基礎(chǔ)必學(xué)TreeSet集合
一、特點(diǎn)
1.元素有序,這里的順序不是指的存儲(chǔ)和取出的順序,而是按照一定規(guī)則進(jìn)行排序,具體排序方法要看構(gòu)造方法
TreeSet():無(wú)參構(gòu)造,根據(jù)元素的自然順序排序也就是從小到大的排序方式進(jìn)行排序
TreeSet(Comparator comparator):帶參構(gòu)造,根據(jù)指定的比較器進(jìn)行排序
2.沒(méi)有帶索引的方法,所以不能使用for循環(huán),可以使用增強(qiáng)for循環(huán)或者迭代器
3.由于是Set集合,所以是不包含重復(fù)元素的集合
使用無(wú)參構(gòu)造進(jìn)行存儲(chǔ)數(shù)據(jù)并遍歷練習(xí):
public class TreeSetDemo {
? public static void main(String[] args) {
? ? ? //創(chuàng)建對(duì)象
? ? ? TreeSet<Integer>ts=new TreeSet<Integer>();//注意:泛型中引用類型要用它的包裝類類型
? ? ? //添加數(shù)據(jù)
? ? ? ts.add(10);//自動(dòng)裝箱實(shí)現(xiàn)
? ? ? ts.add(8);
? ? ? ts.add(7);
? ? ? ts.add(5);
? ? ? ts.add(10);//由于是Set集合不包含重復(fù)元素,所以該元素不顯示
? ? ? //遍歷方法一 增強(qiáng)for
? ? ? for (Integer i:ts){
? ? ? ? ? System.out.println(i);
? ? ? }
? ? ? System.out.println("--------------------------------");
? ? ? //遍歷方法二 迭代器
? ? ? Iterator<Integer>it =ts.iterator();
? ? ? while(it.hasNext()){
? ? ? ? ? System.out.println(it.next());
? ? ? }
? }
}二,補(bǔ)充
TreeSet集合實(shí)現(xiàn)了SortedSet接口, 可以對(duì)集合中元素進(jìn)行自然排序, 要求集合中的元素必須是可比較的。
package com.wkcto.chapter05.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* TreeSet集合
* 可以對(duì)元素進(jìn)行自然排序, 要求元素必須是可比較的
* 1)創(chuàng)建TreeSet集合時(shí),通過(guò)構(gòu)造方法指定Comparator比較器
* 2)如果沒(méi)有指定Comparator比較器, 要求元素的類必須實(shí)現(xiàn)Comparable接口
* @author 蛙課網(wǎng)
*
*/
public class Test03 {
public static void main(String[] args) {
//1) 創(chuàng)建TreeSet集合,存儲(chǔ)Person對(duì)象, 在構(gòu)造方法中指定Comparator比較器,按姓名升序排序
TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
//在匿名內(nèi)部類中重寫(xiě)接口的抽象方法
@Override
public int compare(Person o1, Person o2) {
//指定一個(gè)比較規(guī)則
return o1.name.compareTo(o2.name); //姓名升序
}
});
//2)添加元素
treeSet.add(new Person("lisi", 18));
treeSet.add(new Person("feifei", 28));
treeSet.add(new Person("yong", 35));
treeSet.add(new Person("bin", 36));
treeSet.add(new Person("zhang", 33));
//3)直接打印
System.out.println( treeSet );
//4) 根據(jù)已有TreeSet創(chuàng)建新的TreeSet集合
TreeSet<Person> treeSet22 = new TreeSet<>(treeSet);
System.out.println( treeSet22 );
//5) 使用TreeSet的無(wú)參構(gòu)造, 沒(méi)有指定Comparator比較器, 要求Person類實(shí)現(xiàn)Comparable接口
TreeSet<Person> treeSet33 = new TreeSet<>();
treeSet33.addAll(treeSet);
System.out.println( treeSet33);
}
}TreeSet集合底層是TreeMap,向TreeSet集合添加元素,實(shí)際上是把該元素作為鍵添加到了底層TreeMap中,TreeSet集合實(shí)際上就是底層TreeMap的鍵的集合。
package com.wkcto.chapter05.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* 注意:
* 在TreeSet集合中, 是根據(jù)Comparator/Comparable的比較結(jié)果是否為0來(lái)判斷是否為同一個(gè)對(duì)象
* 如果Comparator的compare()方法/Comparable的compareTo()方法的返回值為0 就認(rèn)為是同一個(gè)對(duì)象
* @author 蛙課網(wǎng)
*
*/
public class Test04 {
public static void main(String[] args) {
//創(chuàng)建TreeSet集合,存儲(chǔ)Person對(duì)象, 通過(guò)構(gòu)造方法指定Comparator比較器,按年齡降序排序
TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.age - o1.age;
}
});
//當(dāng)前treeSet是根據(jù)年齡比較Person大小的, 在添加Person對(duì)象時(shí), 如果年齡相同就認(rèn)為是同一個(gè)對(duì)象
treeSet.add(new Person("lisi", 18));
treeSet.add(new Person("feifei", 18));
treeSet.add(new Person("zhang", 18));
treeSet.add(new Person("yong", 18));
System.out.println( treeSet.size() ); // 1
System.out.println( treeSet );
System.out.println( treeSet.contains( new Person("wang", 18))); //true
}
}到此這篇關(guān)于Java必學(xué)基礎(chǔ)TreeSet集合的文章就介紹到這了,更多相關(guān)Java TreeSet集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ChatGPT-4.0未來(lái)已來(lái) 你來(lái)不來(lái)
最近聽(tīng)說(shuō)了一個(gè)非?;鸬募夹g(shù)ChatGPT4.0,今天這篇文章就給大家介紹一下ChatGPT究竟是什么東東,不得不說(shuō)ChatGPT是真的強(qiáng),下面就讓我們一起了解究竟什么是ChatGPT吧2023-03-03
IDEA中編寫(xiě)并運(yùn)行shell腳本的實(shí)現(xiàn)
這篇文章主要介紹了IDEA中編寫(xiě)并運(yùn)行shell腳本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Tomcat能起開(kāi),但是訪問(wèn)不進(jìn)8080首頁(yè)的問(wèn)題解決方案
這篇文章主要介紹了Tomcat能起開(kāi),但是訪問(wèn)不進(jìn)8080首頁(yè)的問(wèn)題解決方案的相關(guān)資料,需要的朋友可以參考下2016-10-10
spring boot 本地圖片不能加載(圖片路徑)的問(wèn)題及解決方法
這篇文章主要介紹了spring boot 本地圖片不能加載(圖片路徑)的問(wèn)題,解決的辦法其實(shí)很簡(jiǎn)單,只要寫(xiě)一個(gè)配置文件,也就是圖片位置的轉(zhuǎn)化器,原理是虛擬一個(gè)在服務(wù)器上的文件夾,與本地圖片的位置進(jìn)行匹配。需要的朋友可以參考下2018-04-04
java正則表達(dá)式提取數(shù)字的方法實(shí)例
這篇文章主要介紹了java正則表達(dá)式提取數(shù)字的方法,還有去除字符串?dāng)?shù)字的方法,大家參考使用吧2013-12-12
spring boot前后端傳參的實(shí)現(xiàn)
這篇文章主要介紹了spring boot前后端傳參的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

