中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

互助| 清涧县| 荃湾区| 西和县| 安新县| 和林格尔县| 克拉玛依市| 长治县| 延边| 都匀市| 宜春市| 商河县| 西丰县| 九龙坡区| 临朐县| 洛宁县| 宜兰县| 丰城市| 宾川县| 汉川市| 平塘县| 漠河县| 陆丰市| 南开区| 九江市| 彭州市| 礼泉县| 耿马| 武夷山市| 德钦县| 收藏| 东港市| 临安市| 池州市| 卢氏县| 南雄市| 岳阳县| 佛冈县| 吉水县| 山西省| 镇原县|