真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TreeSet中怎么實現(xiàn)子類排序操作

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

創(chuàng)新互聯(lián)建站專注于電白企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城網(wǎng)站制作。電白網(wǎng)站建設(shè)公司,為電白等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

TreeSet子類排序操作

經(jīng)過分析后發(fā)現(xiàn),TreeSet子類中保存的數(shù)據(jù)是允許排序的,但是這個類必須要實現(xiàn)Comparable接口,只有實現(xiàn)了此接口才能夠確認(rèn)出對象的大小關(guān)系。

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

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

import java.util.Set;import java.util.TreeSet;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Set all=new TreeSet();
        all.add(new Person("張三",19));
        all.add(new Person("李四",19));   //年齡相同,但姓名不同all.add(new Person("王五",20));   //數(shù)據(jù)重復(fù)all.add(new Person("王五",20));   //數(shù)據(jù)重復(fù)all.add(new Person("小強(qiáng)",78));
        all.forEach(System.out::println);
    }
}class Person implements Comparable{    //比較器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
* 姓名:小強(qiáng)、年齡:78
*/

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

由于TreeSet在操作過程之中需要將類中的所有屬性進(jìn)行比對,這樣的實現(xiàn)難度太高了,那么在實際的開發(fā)中應(yīng)該首選HashSet子類進(jìn)行存儲。

重復(fù)元素消除

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

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

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

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

范例:實現(xiàn)重復(fù)元素處理

import java.util.Set;import java.util.HashSet;public class JavaAPIDemo {public static void main(String[] args) throws Exception {Set all=new TreeSet();all.add(new Person("張三",19));all.add(new Person("李四",19));   //年齡相同,但姓名不同all.add(new Person("王五",20));   //數(shù)據(jù)重復(fù)all.add(new Person("王五",20));   //數(shù)據(jù)重復(fù)all.add(new Person("小強(qiáng)",78));all.forEach(System.out::println);
    }
}class Person implements Comparable{    //比較器
    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);
        }
    }
}/**
* 姓名:小強(qiáng)、年齡:78
* 姓名:李四、年齡:19
* 姓名:王五、年齡:20
* 姓名:張三、年齡:19
*/

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


網(wǎng)站標(biāo)題:TreeSet中怎么實現(xiàn)子類排序操作
分享URL:http://weahome.cn/article/jdpsod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部