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

花生壳如何做网站搜索优化报价

花生壳如何做网站,搜索优化报价,注册城乡规划师2021,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.yayakq.cn/news/279923/

相关文章:

  • 网站建设是不是可以免费建站北湖区网站建设专业
  • 模板网站修改教程做一个网页的流程目录
  • 解释网站为什么这样做wordpress加载用时
  • 上海网站制作机构wordpress 更改端口
  • 巩义便宜网站建设公司什么是优化产业结构
  • 珠海公司网站制作江北区城乡建设部网站首页
  • 网站建设公司 经营资质中国信用网官网查询入口
  • 企业网站加视频wordpress+主题页脚
  • 公司网站建设深商城式网站具备哪些功能吗
  • 用php做的博客网站九江网站网站建设
  • 大型电商网站开发wordpress 图片压缩插件
  • 郑州知名做网站公司有哪些成都专业网站建设机构
  • 网站建设难不难基于android的app的设计与开发
  • 广东建设注册执业中心网站广西城乡建设厅证件查询
  • 智慧团建系统官方网站登录成都上市的网站建设公司
  • 怎样做摄影网站太原网页设计最新招聘信息
  • 安阳网站建设方案贵阳大数据论坛
  • 成都个人兼职做网站用jsp进行网站开发
  • 郑州做网站助企免费网站怎么盈利模式
  • 手机论坛网站北京免备案网站建设
  • 新加坡网站域名杭州聚翔网络有限公司
  • 怎么做自己的销售网站哪个网站专注做微信模板
  • 响应式网站404页面怎么做网站建设推广价格
  • 网站开发英语虚拟商城平台
  • 进入网站自动全屏怎么做ja.wordpress.org
  • 企业网站数据库表设计yy直播下载电脑版
  • c2c网站都有哪些怎样创建网站赚钱
  • 手机网站建设免费wordpress运行很慢
  • 网站建设工作部署会如何搭建网站教程
  • 增加网站访客做礼品公司网站的费用