亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TreeSet中怎么實現子類排序操作

發布時間:2021-07-14 16:58:40 來源:億速云 閱讀:122 作者:Leah 欄目:編程語言

TreeSet中怎么實現子類排序操作,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

TreeSet子類排序操作

經過分析后發現,TreeSet子類中保存的數據是允許排序的,但是這個類必須要實現Comparable接口,只有實現了此接口才能夠確認出對象的大小關系。

提示:TreeSet本質上是利用TreeMap子類實現的集合數據的存儲,而TreeMap(樹)就需要根據Comparable來確定對象的大小關系。

那么下面就使用一個自定義的類來實現排序的處理操作。
范例:使用自定義的類實現排序的處理操作

import java.util.Set;import java.util.TreeSet;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Set<Person> all=new TreeSet<Person>();
        all.add(new Person("張三",19));
        all.add(new Person("李四",19));   //年齡相同,但姓名不同all.add(new Person("王五",20));   //數據重復all.add(new Person("王五",20));   //數據重復all.add(new Person("小強",78));
        all.forEach(System.out::println);
    }
}class Person implements Comparable<Person>{    //比較器private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;
    }public String toString() {return "姓名:" + this.name + "、年齡:" + this.age;
    }
    @Overridepublic int compareTo(Person per) {if(this.age < per.age){return -1 ;
        }else if(this.age > per.age) {return 1;
        }else {return this.name.compareTo(per.name);
        }
    }
}/**
* 姓名:張三、年齡:19
* 姓名:李四、年齡:19
* 姓名:王五、年齡:20
* 姓名:小強、年齡:78
*/

在使用自定義類對象進行比較處理的時候,一定要將該類中所有屬性都依次進行大小關系的匹配,否則某一個或者幾個屬性相同的時候也會被認為是重復數據,所以TreeSet是利用了Comparable接口來確認重復數據的。

由于TreeSet在操作過程之中需要將類中的所有屬性進行比對,這樣的實現難度太高了,那么在實際的開發中應該首選HashSet子類進行存儲。

重復元素消除

TreeSet類是利用了Comparable接口來實現了重復元素的判斷,但是Set集合的整體特征就是不允許保存重復元素。但是HashSet判斷重復元素的方式并不是利用Comparable接口完成的,它利用的是Object類中提供的方法實現的:

  • 對象編碼:public int hashCode();

  • 對象比較:public boolean equals(Object obj);

在進行重復元素判斷的時候首先利用hashCode()進行編碼的匹配,如果該編碼不存在,則表示數據不存在,證明沒有重復,如果該編碼存在,則進一步進行對象比較處理,如果發現重復了,則此數據是不允許保存的。如果使用的是Eclipse開發工具,則可以幫助開發者自動創建HashCode()與equals()方法。
TreeSet中怎么實現子類排序操作
image.png

范例:實現重復元素處理

import java.util.Set;import java.util.HashSet;public class JavaAPIDemo {public static void main(String[] args) throws Exception {Set<Person> all=new TreeSet<Person>();all.add(new Person("張三",19));all.add(new Person("李四",19));   //年齡相同,但姓名不同all.add(new Person("王五",20));   //數據重復all.add(new Person("王五",20));   //數據重復all.add(new Person("小強",78));all.forEach(System.out::println);
    }
}class Person implements Comparable<Person>{    //比較器
    private String name;
    private int age;public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Overridepublic int hashCode() {
        final int prime = 31;int result = 1;
        result = prime * result +age;
        result = prime * result + ((name == null)? 0 : name.hashCode());return result;
    }

    @Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;
        Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;
        }else if (!name.equals(other.name))return false;return true;
    }public String toString() {return "姓名:" + this.name + "、年齡:" + this.age;
    }
    @Overridepublic int compareTo(Person per) {if(this.age < per.age){return -1 ;
        }else if(this.age > per.age) {return 1;
        }else {return this.name.compareTo(per.name);
        }
    }
}/**
* 姓名:小強、年齡:78
* 姓名:李四、年齡:19
* 姓名:王五、年齡:20
* 姓名:張三、年齡:19
*/

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

甘泉县| 乐东| 永靖县| 商丘市| 巴东县| 甘泉县| 永福县| 陆川县| 宁城县| 汕尾市| 黑山县| 蒙山县| 额济纳旗| 浏阳市| 白沙| 三门县| 新化县| 锦州市| 连城县| 郯城县| 揭西县| 始兴县| 海丰县| 新泰市| 龙州县| 宁德市| 桐乡市| 柳河县| 无极县| 道真| 韩城市| 桑日县| 井研县| 厦门市| 广平县| 钟祥市| 霍山县| 定南县| 基隆市| 南靖县| 迭部县|