电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

簡(jiǎn)單的理解java集合中的HashSet和HashTree幾個(gè)重寫方法

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

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

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

當(dāng)我們HashSet里面存的是字符串時(shí),就能默認(rèn)去重了,因?yàn)镾tring已經(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'); //運(yùn)行結(jié)果,給去重了,而且是無序的 System.out.println(set);//[java, c, bigdata, php] }}

但是當(dāng)我們有類的時(shí)候,比如Person,Cat,Dog,我們自己寫的類,但是我們想按照自己制定的規(guī)則去重,就比如Person的姓名和年齡,因?yàn)镻erson類是我們自己建的,如果我們沒有重寫方法,就會(huì)去找Object的hashcode方法,這樣new Person()的hashcode就會(huì)不同,這樣每個(gè)都是一個(gè)新的,都會(huì)輸出,即使年齡和姓名一樣

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)); //運(yùn)行結(jié)果是即使名字年齡一樣,也會(huì)輸出兩個(gè),我們?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不一樣時(shí),就不會(huì)比較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;是因?yàn)榕掠锌赡艹霈F(xiàn)這個(gè)name.hashCode()+age 和 下一個(gè)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)實(shí)現(xiàn)了Comparable接口,并重寫 了compareTo方法,但是如果我們自己寫類的話,比如Person來說,如果想要按照自己的規(guī)則比,就要重寫hashcode方法和實(shí)現(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] }}

但是要是自己的類會(huì)報(bào)錯(cuò)cannot be cast to java.lang.Comparable,因?yàn)镻erson會(huì)去找compareTo的方法,但是Person類沒有實(shí)現(xiàn)它,我們要去實(shí)現(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 +’}’; }}

這樣我們就可以實(shí)現(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ù)類的屬性進(jìn)行排序 @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)于簡(jiǎn)單的理解java集合中的HashSet和HashTree幾個(gè)重寫方法的文章就介紹到這了,更多相關(guān)java HashSet和HashTree重寫內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: DDoS安全防护官网-领先的DDoS安全防护服务商 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 体坛网_体坛+_体坛周报新闻客户端| 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 真空上料机(一种真空输送机)-百科| 加盟店-品牌招商加盟-创业项目商机平台 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 北京亦庄厂房出租_经开区产业园招商信息平台| 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 999范文网_优质范文下载写作帮手| 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面| 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 |