日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

Java中的set是無序的,但是是不可重復(fù)的

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

當(dāng)我們HashSet里面存的是字符串時,就能默認去重了,因為String已經(jīng)重寫了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'); //運行結(jié)果,給去重了,而且是無序的 System.out.println(set);//[java, c, bigdata, php] }}

但是當(dāng)我們有類的時候,比如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)); //運行結(jié)果是即使名字年齡一樣,也會輸出兩個,我們?nèi)绻胍凑兆约旱囊?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方法,當(dāng)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); } //和屬性關(guān)聯(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,還要調(diào)用元素的compareTo方法, String類已經(jīng)實現(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;}}

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

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品97| 日本aⅴ免费视频一区二区三区| 精品久久久亚洲| 亚洲a成人v| 婷婷精品在线| 一区二区三区四区日韩| 在线观看精品| 国产精品99免费看| 日韩大片在线播放| 国产精品毛片久久| 久久久久久夜| 国产精品xx| 欧美网站在线| 国产一区二区三区四区| 亚洲免费影院| 在线视频精品| 精品一区二区三区中文字幕视频 | 日本久久二区| 日韩中文欧美| 日韩av一区二区三区四区| 黄色精品视频| 美女尤物久久精品| 91亚洲无吗| 久久久精品五月天| 日本99精品| 欧美91福利在线观看| 国产欧美一区二区精品久久久 | 成人黄色av| 欧美一区成人| 欧美日本一区| 国产精品hd| 亚洲黄色在线| 亚洲黄色中文字幕| 麻豆久久久久久| 亚洲精品极品| 亚洲激情欧美| 日本免费久久| 精品理论电影在线| 日韩av中文字幕一区二区三区| 亚洲综合在线电影| 亚洲欧洲美洲av| 国产成人精品一区二区三区免费| 日韩精品一页| 亚洲人妖在线| 亚洲资源网站| 免费在线观看一区二区三区| 久久精品99久久久| 日本精品在线中文字幕| 美女av一区| 最新国产精品久久久| 好看的亚洲午夜视频在线| a日韩av网址| 日韩av免费大片| 国产高清日韩| 国产乱子精品一区二区在线观看 | 久久久久99| 久久久久久一区二区| 国产精品第一| 久久女人天堂| 精品国产aⅴ| 美女高潮久久久| 精品一级视频| 在线手机中文字幕| 久久蜜桃精品| 99视频在线精品国自产拍免费观看| 一区在线观看| 亚洲免费影视| 91精品啪在线观看国产爱臀| 日韩手机在线| 精品九九久久| 精品美女视频| 国产综合视频| 婷婷五月色综合香五月| 欧美精品福利| 精品日本视频| 欧美日韩国产v| 亚洲欧美伊人| 日韩黄色av| 丰满少妇一区| 欧美日韩日本国产亚洲在线| 一区二区国产在线| 久久成人av| 欧洲激情综合| 欧美精品中文| 久久久精品五月天| 视频在线观看91| 国产精品探花在线观看| 欧洲精品一区二区三区| 红桃视频国产精品| 精品资源在线| 国产视频一区在线观看一区免费| 91大神在线观看线路一区| 福利欧美精品在线| 亚洲欧美日韩视频二区| 久久av导航| 日韩中文字幕一区二区三区| 国产精品视频一区视频二区| 成人av二区| 精品免费视频| 日本aⅴ精品一区二区三区 | 国产aⅴ精品一区二区四区| 黄色日韩在线| 精品国产乱码久久久| 婷婷亚洲精品| 日韩在线播放一区二区| 婷婷精品在线| 亚洲欧美日本国产专区一区| 国产一区二区三区免费在线| 蜜桃视频在线观看一区| 99国产精品免费视频观看| 国产精品久久久久9999高清| 亚洲主播在线| 久久亚洲成人| 精品三级av| 麻豆中文一区二区| 欧美亚洲色图校园春色| 综合干狼人综合首页| 欧美成人精品| 免费一二一二在线视频| 国产成人精选| 中文字幕色婷婷在线视频| 久久精品国产网站| 国产精品久一| 国产日韩一区| 欧美激情麻豆| 久久精品国产99国产| 久久超碰99| 久久99蜜桃| 欧美在线日韩| 国产毛片一区二区三区| 欧美欧美黄在线二区| 911亚洲精品| 麻豆精品在线观看| 麻豆久久一区二区| 国产在线观看www| caoporn视频在线| 福利一区二区免费视频| 国产 日韩 欧美一区| 999久久久91| 亚洲尤物在线| 日韩专区视频网站| 91综合久久爱com| 国产极品嫩模在线观看91精品| 91国内精品| 国产一区一一区高清不卡| 欧美不卡高清一区二区三区| 在线成人动漫av| 美国三级日本三级久久99| 日韩一区精品字幕| 国产精品亚洲综合色区韩国| 老牛影视精品| aa国产精品| 国产精品地址| 夜夜嗨一区二区| 91精品福利观看| 成人一区而且| 视频在线在亚洲| 9999国产精品| 99国产精品久久久久久久| 欧美日韩伊人| 成人av动漫在线观看| 久久国产精品美女| 日韩视频在线一区二区三区 | 国产精品亚洲综合在线观看| 国产精品tv| 香蕉成人久久| 国产h片在线观看| 亚洲影院天堂中文av色| 高清不卡一区| 国产亚洲电影| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美日韩激情在线一区二区三区| 亚洲精品国产精品粉嫩| 日韩在线看片| 日本一区二区三区视频在线看| 群体交乱之放荡娇妻一区二区| 国产午夜精品一区在线观看| 在线日韩一区| av在线最新| 久久99性xxx老妇胖精品| 亚洲精品伦理| 蜜桃av一区二区在线观看| 日韩精品麻豆| 黄色在线网站噜噜噜| 国产精品一区二区三区www| 99视频精品| 国产suv精品一区二区四区视频| 国产精品免费99久久久| 欧美久久一区二区三区| 蜜臀av亚洲一区中文字幕| 亚洲二区三区不卡| 日韩精品午夜| 欧美日韩国产v| 成人美女视频| 日韩成人高清| 国产精品久久久久久久久久10秀 | 日本欧美一区| 麻豆91在线播放| 老司机免费视频一区二区| 亚洲一区亚洲|