Java中TreeSet類如何使用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創新互聯主要從事網站設計、成都做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務鎮賚,十年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:028-86922220
首先自定義一個Student類,類里面有三個屬性,分別是姓名、學號、年齡
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;
}
}然后我們給這個類的三個屬性添加值,并且將類的實例化對象添加到TreeSet類中。
注意:TreeSet類是沒有get方法的,要輸出里面的內容得通過foreach循環或者迭代器輸出,如果直接通過print進行輸出,顯示的是內存地址對象。
然后我們來看下輸出結果
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);
// 通過迭代器輸出結果
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Student o = (Student) iterator.next();
System.out.println(o.getName());
}
}
}
可以看到無法正常輸出,報錯。這里報錯的原因是類型轉換錯誤。因為將對象存入TreeSet類中時需要對對象進行一個比較,第一次存入時因為沒有可對比的對象,所以不會報錯,但是當第二個對象存入時需要同第一個對象進行比較,再決定在二叉樹中存放的位置。這里的比較方法需要我們自己去實現Comparable<>接口重寫一個compareTo()方法。
那么現在在自定義Student類中實現Comparable并且重現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;
}
}現在看下輸出結果

可以看到存入的內容可以正常輸出的了,但是老黑沒有輸出,這是因為老黑和老王的年齡相同,而我們重寫的compareTo()方法中的比較條件就是年齡。下面來看看這個方法中的返回值的含義。
@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的底層結構是一個二叉樹,每次插入的對象都會根據二叉樹的結構進行排列。當前后兩個對象的條件進行比較返回正數時,后一個對象會存在已前一個對象為根的右節點;當前后兩個對象的條件進行比較返回負數時,后一個對象會存在已前一個對象為根的左節點;當前后兩個對象的條件進行比較返回0時,后一個對象不存入TreeSet中。因為老黑和老王年齡相同,所以這里名字為老黑的對象就不存入了。
看完上述內容,你們掌握Java中TreeSet類如何使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
分享文章:Java中TreeSet類如何使用
轉載注明:http://www.yijiale78.com/article42/gceshc.html
成都網站建設公司_創新互聯,為您提供軟件開發、ChatGPT、品牌網站制作、做網站、用戶體驗、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯