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

济南学网站建设哪里好/湖南seo网站多少钱

济南学网站建设哪里好,湖南seo网站多少钱,进一步推进政府网站建设工作的通知,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.jmfq.cn/news/4834261.html

相关文章:

  • 去哪找做塑料的网站/足球世界积分榜
  • 免费微信网站开发/网络营销外包推广
  • 模板建站优点/网站建设报价单
  • 建德网站建设公司/品牌网络营销策划
  • 网站模板素材下载/优化seo是什么意思
  • 怎么做自己的网站logo/推广app大全
  • 网站加速工具/网络营销产品策略的内容
  • 水利部网站 生产建设项目/网络营销案例分析题及答案
  • 做网站推广弊端/it培训班学出来有用吗
  • wordpress琪亚娜/上海专业seo排名优化
  • 大连品牌网站建设公司/网络推广网站排行榜
  • 网站开发自学/seo关键词优化服务
  • 电商网站设计思想/百度竞价推广思路
  • 玛迪做网站/网络营销策划书800字
  • 移动网站与pc网站/萌新seo
  • 网站开发人员岗位职责/优化精灵
  • 哪些网站有中文域名/网络优化大师
  • 哪个网站可以免费做初级试题/seo长尾关键词
  • 广东专业网站建设/拼多多怎么查商品排名
  • 上海公司注册查询官网/网站外部优化的4大重点
  • html免费代码网站/深圳媒体网络推广有哪些
  • 企业建设网站公司有哪些/线上营销推广
  • 云南网站建设选天软/怎样推广自己的产品
  • 青岛信息排名推广/临沂seo代理商
  • 焦作做网站最专业的公司/彩虹云商城网站搭建
  • 网站建设代理都有哪些/网站seo快速排名
  • 北京企业官网网站建设/推广app软件
  • 直播网站建设重庆/百度站长号购买
  • 公司网址平台有哪些/公众号排名优化软件
  • 成都微信网站建设/宁波seo网站