Java中TreeSet類如何使用,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鎮(zhèn)賚,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
首先自定義一個(gè)Student類,類里面有三個(gè)屬性,分別是姓名、學(xué)號(hào)、年齡
public class Student{ private String name; private String num; private int age; Student(String name, String num, int age) { this.name = name; this.num = num; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
然后我們給這個(gè)類的三個(gè)屬性添加值,并且將類的實(shí)例化對(duì)象添加到TreeSet類中。
注意:TreeSet類是沒有g(shù)et方法的,要輸出里面的內(nèi)容得通過foreach循環(huán)或者迭代器輸出,如果直接通過print進(jìn)行輸出,顯示的是內(nèi)存地址對(duì)象。
然后我們來看下輸出結(jié)果
import java.util.Iterator; import java.util.Set; public class TreeSet { public static void main(String[] args) { Student s1 = new Student("張珊", "111213", 18); Student s2 = new Student("隔壁", "111215", 19); Student s3 = new Student("翠花", "111214", 12); Student s4 = new Student("老王", "111212", 11); Student s5 = new Student("老黑", "111212", 11); Set set = new java.util.TreeSet(); set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); // 通過迭代器輸出結(jié)果 Iterator iterator = set.iterator(); while (iterator.hasNext()) { Student o = (Student) iterator.next(); System.out.println(o.getName()); } } }
可以看到無法正常輸出,報(bào)錯(cuò)。這里報(bào)錯(cuò)的原因是類型轉(zhuǎn)換錯(cuò)誤。因?yàn)閷?duì)象存入TreeSet類中時(shí)需要對(duì)對(duì)象進(jìn)行一個(gè)比較,第一次存入時(shí)因?yàn)闆]有可對(duì)比的對(duì)象,所以不會(huì)報(bào)錯(cuò),但是當(dāng)?shù)诙€(gè)對(duì)象存入時(shí)需要同第一個(gè)對(duì)象進(jìn)行比較,再?zèng)Q定在二叉樹中存放的位置。這里的比較方法需要我們自己去實(shí)現(xiàn)Comparable<>接口重寫一個(gè)compareTo()方法。
那么現(xiàn)在在自定義Student類中實(shí)現(xiàn)Comparable并且重現(xiàn)compareTo()方法
public class Student implements Comparable<Student>{ private String name; private String num; private int age; Student(String name, String num, int age) { this.name = name; this.num = num; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student o) { //通過年齡的比較確定存放順序 return this.age-o.age; } }
現(xiàn)在看下輸出結(jié)果
可以看到存入的內(nèi)容可以正常輸出的了,但是老黑沒有輸出,這是因?yàn)槔虾诤屠贤醯哪挲g相同,而我們重寫的compareTo()方法中的比較條件就是年齡。下面來看看這個(gè)方法中的返回值的含義。
@Override public int compareTo(Student o) { return 0;<br data-filtered="filtered"> return 1;<br data-filtered="filtered"> return -1;<br data-filtered="filtered"> }
compareTo()方法的返回值類型是int類型,在這里只存在三種情況,分別是:大于0,小于0,和等于0。
TreeSet的底層結(jié)構(gòu)是一個(gè)二叉樹,每次插入的對(duì)象都會(huì)根據(jù)二叉樹的結(jié)構(gòu)進(jìn)行排列。當(dāng)前后兩個(gè)對(duì)象的條件進(jìn)行比較返回正數(shù)時(shí),后一個(gè)對(duì)象會(huì)存在已前一個(gè)對(duì)象為根的右節(jié)點(diǎn);當(dāng)前后兩個(gè)對(duì)象的條件進(jìn)行比較返回負(fù)數(shù)時(shí),后一個(gè)對(duì)象會(huì)存在已前一個(gè)對(duì)象為根的左節(jié)點(diǎn);當(dāng)前后兩個(gè)對(duì)象的條件進(jìn)行比較返回0時(shí),后一個(gè)對(duì)象不存入TreeSet中。因?yàn)槔虾诤屠贤跄挲g相同,所以這里名字為老黑的對(duì)象就不存入了。
看完上述內(nèi)容,你們掌握J(rèn)ava中TreeSet類如何使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享文章:Java中TreeSet類如何使用
轉(zhuǎn)載注明:http://jinyejixie.com/article42/gceshc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、ChatGPT、品牌網(wǎng)站制作、做網(wǎng)站、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)