当前位置: 首页 > news >正文

网站建设感悟人民日报今日头条新闻

网站建设感悟,人民日报今日头条新闻,wordpress 短信接口,真正永久免费网络电话本人博客《HashMap、HashSet底层原理分析》,可以了解hashmap的底层源码实现 测试代码 HashSet底层实际就是一个Hashmap。猜猜下面源码每一个打印结果。 注:user对象重写的hashcode方法,保证name和age一样的情况下hashcode是一样的&#xff…

本人博客《HashMap、HashSet底层原理分析》,可以了解hashmap的底层源码实现

测试代码

HashSet底层实际就是一个Hashmap。猜猜下面源码每一个打印结果。
注:user对象重写的hashcode方法,保证name和age一样的情况下hashcode是一样的,

import java.util.*;public class HashmapTest {public static void main(String[] args) {HashMap map = new HashMap();User u1 = new User("AA");User u2 = new User("BB");map.put(u1,1);map.put(u2,2);System.out.println("结果一(put u1 u2  后)="+map);// u1 重新Set nameu1.setName("CC");System.out.println("结果二(u1 set name 后)="+map);// 移除 u1map.remove(u1);System.out.println("结果三(remove u1 后)="+map);// put user(CC)map.put(new User("CC"),3);System.out.println("结果四(put user(CC) 后)="+map);// put user(AA)map.put(new User("AA"),4);System.out.println("结果五(put user(AA) 后)="+map);}
}class User{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public User(String name, int age) {this.name = name;this.age = age;}public User(String name) {this.name = name;}public User() {}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

测试结果

结果一(put u1 u2  后)={User{name='BB', age=0}=2, User{name='AA', age=0}=1}
结果二(u1 set name 后)={User{name='BB', age=0}=2, User{name='CC', age=0}=1}
结果三(remove u1 后)={User{name='BB', age=0}=2, User{name='CC', age=0}=1}
结果四(put user(CC) 后)={User{name='BB', age=0}=2, User{name='CC', age=0}=3, User{name='CC', age=0}=1}
结果五(put user(AA) 后)={User{name='BB', age=0}=2, User{name='CC', age=0}=3, User{name='CC', age=0}=1, User{name='AA', age=0}=4}

分析

结果一和结果二属于Java基础

结果三分析

结论:并没有移除u1成功。

map.remove(u1);

1、了解put方法做了哪些事?
map.put(u1,1); 第一次put时,数组下标、Node节点中保存的hash均是通过new User(“AA”)计算并保存的
2、SetName后,该节点中保存了什么?
u1.setName(“CC”); SetName时,只改变了值,Node节点在数组中的位置、Node节点中保存的hash值均还是new User(“AA”)的
3、了解map是怎么实现remove?

  • remove和put是类似的,通过remove传入的对象,经过计算下标,然后和该下标内的数据进行比对(hash值相等 且 (== 或 equals))。

  • 原Node在数组中下标、Node内hash值均保存的是new User(“AA”),但是remove传入的却是CC,就算下标一样,hash值肯定是不一样的,所以并不会移除u1对象

结果四分析

结论:成功put。

map.put(new User("CC"),3);

1、通过结果三分析已经知道put时做了那些事,就算Hash计算的下标一样,hash值和目前存在的数据肯定是不一样的,所以是可以正常加入的。
2、假设计算后下标一致,u1 节点保存的hash值是AA的,结果四put的是CC的hash,所以肯定不一样,此时是可以正常加入的

结果五分析

结论:成功put。

map.put(new User("AA"),4);

1、通过结果三分析已经知道remove时做了那些事,实际put也一样,hash冲突(下标相等)时,hash值相等 且 (== 或 equals)时才会认为是相等的
2、此时put进去的new User(“AA”)和原保存进去的u1,两者hash冲突(因为user对象重新了hashcode方法,hashcode是一样的,计算后的下标是一样的),hash值也相等(都是AA的),但是u1实际保存的Name是CC,不论是==还是equals均返回的是false,所以也是可以正常put进去的

http://www.yidumall.com/news/108127.html

相关文章:

  • 建立网站需要多少钱稻挺湖南岚鸿有名做引流的公司是正规的吗
  • 手机网站标准字体大小站长素材音效下载
  • 网站推广过程叙述舆情网站入口
  • 广州网站建设公司排名优化英文
  • 广州企业建站系统模板百度站长中心
  • 网站建设宣传资料百度用户服务中心人工电话
  • 王爷不可以西安seo关键字优化
  • 购物网站建设目标甘肃网站推广
  • 东莞南城网站建设公司网站优化快速排名软件
  • 张家港网站建设优化网站开发北京公司
  • 棋牌游戏网站模板网站营销推广
  • json做网站的数据库河北百度seo关键词排名
  • 做企业网站有哪些好处企业seo顾问公司
  • 应用商城下载搜索优化整站优化
  • 评价一个网站设计项目的好坏国际重大新闻
  • 自己做网站能赚钱么手机百度浏览器
  • 杭州外贸网站建设公司排名国内新闻
  • 做宣传页的网站外链网站推荐几个
  • 深圳知名的网站公司简介长尾词优化外包
  • seo详细教程长沙专业竞价优化公司
  • 深圳室内设计培训北京seo工程师
  • 做网站花了三万块网络营销能干什么工作
  • 惠州网站制作公司百度云盘网页版
  • 被墙的网站有哪些seo优化专员
  • 镇江网站建设策划中国国家培训网官网入口
  • 郑州专业网站优化热点营销案例
  • 北京品牌网站建设公司广告软文案例
  • 中小企业建设网站补贴软文代写价格
  • 做红酒网站上海seo优化bwyseo
  • 公司旅游视频网站模板免费下载淘宝搜索关键词技巧