成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

簡單的理解java集合中的HashSet和HashTree幾個重寫方法

瀏覽:78日期:2022-08-22 17:24:08

Java中的set是無序的,但是是不可重復的

HashSet底層是哈希表,通過調用hashcode和equals方法實現(xiàn)去重

當我們HashSet里面存的是字符串時,就能默認去重了,因為String已經重寫了hashcode和euqals方法

public static void main(String[] args) { HashSet<String> set = new HashSet(); set.add('java'); set.add('c'); set.add('php'); set.add('bigdata'); set.add('java'); //運行結果,給去重了,而且是無序的 System.out.println(set);//[java, c, bigdata, php] }}

但是當我們有類的時候,比如Person,Cat,Dog,我們自己寫的類,但是我們想按照自己制定的規(guī)則去重,就比如Person的姓名和年齡,因為Person類是我們自己建的,如果我們沒有重寫方法,就會去找Object的hashcode方法,這樣new Person()的hashcode就會不同,這樣每個都是一個新的,都會輸出,即使年齡和姓名一樣

public class Demo1 { public static void main(String[] args) { HashSet<Person> set1 = new HashSet<>(); set1.add(new Person('aing',50)); set1.add(new Person('bing',10)); set1.add(new Person('ding',20)); set1.add(new Person('ding',20)); //運行結果是即使名字年齡一樣,也會輸出兩個,我們如果想要按照自己的規(guī)則去重,這樣我們一定要重寫hashcode 和euqals方法 System.out.println(set1);//[Person{name=’bing’, age=10}, Person{name=’ding’, age=20}, Person{name=’aing’, age=50}, Person{name=’ding’, age=20}] }}class Person{ String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return 'Person{' +'name=’' + name + ’’’ +', age=' + age +’}’; }}

我們重寫hashcode方法,當hashcode不一樣時,就不會比較equals,直接就是不一樣,如果hashcode一樣,再比較equals方法

public class Demo1 { public static void main(String[] args) { HashSet<Person> set1 = new HashSet<>(); set1.add(new Person('aing',50)); set1.add(new Person('bing',10)); set1.add(new Person('ding',20)); set1.add(new Person('ding',20)); //根據(jù)年齡和姓名比較的 System.out.println(set1);//[Person{name=’ding’, age=20}, Person{name=’aing’, age=50}, Person{name=’bing’, age=10}] }}class Person{ String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return 'Person{' +'name=’' + name + ’’’ +', age=' + age +’}’; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age &&Objects.equals(name, person.name); } //和屬性關聯(lián),根據(jù)屬性的值比較,之所以讓age*100;是因為怕有可能出現(xiàn)這個name.hashCode()+age 和 下一個name.hashCode()+age加起來的值恰好相等,所以age*100,可以避免這種情況的發(fā)生 @Override public int hashCode() { //return Objects.hash(name, age); return name.hashCode()+age*100; }}

TreeSet底層是二叉樹,而且TreeSet還是有序的,在String中不僅重寫了hashcode,還要調用元素的compareTo方法, String類已經實現(xiàn)了Comparable接口,并重寫 了compareTo方法,但是如果我們自己寫類的話,比如Person來說,如果想要按照自己的規(guī)則比,就要重寫hashcode方法和實現(xiàn)Comparable接口

public class Demo2 { public static void main(String[] args) { TreeSet<String> set = new TreeSet(); set.add('java'); set.add('c'); set.add('php'); set.add('bigdata'); set.add('java'); System.out.println(set);//[bigdata, c, java, php] }}

但是要是自己的類會報錯cannot be cast to java.lang.Comparable,因為Person會去找compareTo的方法,但是Person類沒有實現(xiàn)它,我們要去實現(xiàn)Comparable

public class Demo2 { public static void main(String[] args) { TreeSet<Person1> set1 = new TreeSet<>(); set1.add(new Person1('aing',50)); set1.add(new Person1('bing',10)); set1.add(new Person1('ding',20)); set1.add(new Person1('ding',20)); System.out.println(set1); }}class Person1{ String name; int age; public Person1(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return 'Person1{' +'name=’' + name + ’’’ +', age=' + age +’}’; }}

這樣我們就可以實現(xiàn)有序了,根據(jù)我們的屬性

public class Demo2 { public static void main(String[] args) { TreeSet<Person1> set1 = new TreeSet<>(); set1.add(new Person1('aing',50)); set1.add(new Person1('bing',10)); set1.add(new Person1('ding',20)); set1.add(new Person1('ding',20)); System.out.println(set1); }}class Person1 implements Comparable{ String name; int age; public Person1(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person1 person1 = (Person1) o; return age == person1.age &&Objects.equals(name, person1.name); } @Override public int hashCode() { return name.hashCode()+age*100; } @Override public String toString() { return 'Person1{' +'name=’' + name + ’’’ +', age=' + age +’}’; } //根據(jù)類的屬性進行排序 @Override public int compareTo(Object o) { Person1 person = (Person1)o; int num = name.compareTo(person.name); return num==0?age-person.age:num;}}

到此這篇關于簡單的理解java集合中的HashSet和HashTree幾個重寫方法的文章就介紹到這了,更多相關java HashSet和HashTree重寫內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
69av一区二区三区| 欧美日韩一区小说| 日本久久精品电影| 亚洲欧美aⅴ...| 欧美一区亚洲| 日韩欧美高清dvd碟片| 日韩精品久久久久久| 国产九九视频一区二区三区| 伊甸园精品99久久久久久| 国产一区二区h| 国产精品久久久久国产精品日日| 国产欧美高清| 久久人人精品| 午夜久久久久久久久久一区二区| 亚洲日本欧美在线| 中文字幕在线不卡视频| 欧美二区视频| 国产精品护士白丝一区av| 亚洲午夜精品久久久久久浪潮| 国产精品久久久久久久第一福利| 国内精品久久国产| 久久久久久久久久久久久久久99 | 成人综合婷婷国产精品久久免费| 日韩不卡一区二区三区| 一区二区三区不卡视频| 日韩欧美国产精品一区| 久久久国产午夜精品| 99免费精品视频| 久久久99精品久久| aaa亚洲精品| 2020国产成人综合网| 91天堂素人约啪| 国产精品福利一区二区| 亚洲区欧美区| 午夜激情久久久| 欧美视频中文字幕| 国产美女在线观看一区| 欧美一区二视频| 成人伦理片在线| 日本一区二区三区国色天香| 国内精品久久久久国产盗摄免费观看完整版| 国产精品不卡视频| 国产日韩专区| 亚洲精品国产精品乱码不99| 天天操天天综合网| 欧美性做爰猛烈叫床潮| 国产一区二区三区蝌蚪| 欧美va在线播放| 午夜精品电影| 亚洲乱码日产精品bd| 老鸭窝毛片一区二区三区| 久久国产三级精品| 日韩欧美一级二级| 欧美chengren| 亚洲精品水蜜桃| 久久久久久久波多野高潮日日| 视频一区欧美精品| 欧美巨大另类极品videosbest| 成人午夜看片网址| 国产亚洲综合性久久久影院| 一区二区三区我不卡| 亚洲国产精品欧美一二99| 欧美日韩三级在线| 欧美在线黄色| 亚洲一级电影视频| 欧美精品在线一区二区三区| 97精品国产露脸对白| 亚洲最大色网站| 欧美一级精品大片| 亚洲伦理在线免费看| 麻豆精品精品国产自在97香蕉| 女同一区二区| 综合精品久久久| 婷婷开心久久网| 欧洲中文字幕精品| 成人高清av在线| 亚洲精品伦理在线| 欧美色涩在线第一页| www.亚洲色图| 一区二区三区四区在线播放 | 国产欧美一区二区精品忘忧草| 99在线精品免费视频九九视| 奇米888四色在线精品| 欧美v日韩v国产v| 99re国产精品| 国内精品久久久久影院一蜜桃| 久久久国产精品麻豆| 欧美日韩精品久久| 日韩三级在线免费观看| 激情久久综合| 韩国三级在线一区| 亚洲欧洲99久久| 欧美丰满一区二区免费视频| 国产一区视频观看| 精品夜夜嗨av一区二区三区| 国产精品久久久久一区| 欧美日韩另类一区| 亚洲国产一区二区三区高清| 国产美女在线观看一区| 亚洲免费观看高清完整版在线观看| 欧美天堂亚洲电影院在线播放| 成人激情校园春色| 亚洲成在人线免费| 国产日本欧美一区二区| 日本久久精品电影| 国内精品亚洲| 国产伦精品一区二区三区免费迷 | 精品久久免费看| 日韩欧美资源站| 日韩激情在线观看| 欧美一区二区视频在线观看2022 | 亚洲手机在线| 精品影院一区二区久久久| 国产精品水嫩水嫩| 在线不卡一区二区| 精品在线一区二区| 自拍视频在线观看一区二区| 欧美高清视频在线高清观看mv色露露十八 | 亚洲地区一二三色| 国产欧美日韩视频一区二区| 欧美日韩国产欧美日美国产精品| 亚洲国产精品www| www.久久精品| 久久99久国产精品黄毛片色诱| 蓝色福利精品导航| 一区在线播放| 成人小视频在线| 蜜桃视频在线观看一区二区| 亚洲欧美国产高清| 国产视频一区不卡| 久久综合中文字幕| 欧美三级午夜理伦三级中视频| 黄色一区二区三区四区| 波波电影院一区二区三区| 久久激情综合网| 香蕉加勒比综合久久| 中文字幕亚洲欧美在线不卡| www久久久久| 欧美一区三区二区| 欧美三级午夜理伦三级中视频| 久久国产精品99国产| 亚洲激情社区| 你懂的国产精品| 久久精品国产精品亚洲红杏| 亚洲精品成人在线| 国产精品久久久久久一区二区三区| 福利一区二区在线观看| 丝袜诱惑制服诱惑色一区在线观看| 国产精品三级av| 26uuu亚洲综合色| 欧美一区二区三区免费在线看| 色综合久久99| 亚洲欧洲一区二区天堂久久| 91在线精品秘密一区二区| 激情综合色综合久久| 日韩—二三区免费观看av| 亚洲最大色网站| 国产精品丝袜xxxxxxx| 一区二区久久| 一区二区三区国产盗摄 | 日本欧美久久久久免费播放网| 亚洲午夜电影在线| 一区二区三区高清在线| 亚洲免费av在线| 亚洲日本va午夜在线影院| 国产亚洲一区二区三区四区| 国产精品色在线观看| 2020国产精品久久精品美国| 精品欧美乱码久久久久久 | 夜夜精品视频一区二区| 亚洲女爱视频在线| 亚洲天堂精品在线观看| 亚洲色图一区二区| 亚洲丝袜制服诱惑| 亚洲女性喷水在线观看一区| 亚洲人成在线观看一区二区| 综合欧美一区二区三区| 最新国产の精品合集bt伙计| 国产精品高潮呻吟| 亚洲乱码国产乱码精品精98午夜| 亚洲视频你懂的| 精品视频123区在线观看| 欧美三级中文字幕在线观看| 欧美日韩高清一区二区三区| 欧美日韩电影在线| 91精品国产一区二区三区香蕉| 欧美一区二区三区日韩| 欧美α欧美αv大片| 久久久美女毛片| 中文字幕国产一区| 亚洲黄色小视频| 香蕉成人伊视频在线观看| 免费欧美高清视频| 欧美在线观看一区二区| 亚洲区小说区图片区qvod| 美女免费视频一区| 亚洲在线观看| 成人av网址在线| 1024亚洲| 女人色偷偷aa久久天堂|