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

无锡品牌网站建设介绍百度移动

无锡品牌网站建设介绍,百度移动,网站信息资源建设,济南网站建设-中国互联Java之HashMap的底层实现 摘要HashMap的底层原理哈希值转换为数组下标节点初始化put(Object key, Object value)重写toString()get(Object key)增加泛化remove(K key) 摘要 本博客主要讲述了Java的HashMap的底层实现 HashMap的底层原理 底层原理:数组链表 过程…

Java之HashMap的底层实现

  • 摘要
    • HashMap的底层原理
    • 哈希值转换为数组下标
    • 节点
    • 初始化
    • put(Object key, Object value)
    • 重写toString()
    • get(Object key)
    • 增加泛化
    • remove(K key)

摘要

本博客主要讲述了Java的HashMap的底层实现

HashMap的底层原理

底层原理:数组+链表
在这里插入图片描述
在这里插入图片描述
过程总结:每一个Object的有一个哈希值,通过hashCode()函数获取哈希值,再通过自定义的hash()函数,得到一个值,也就是数组的下标。数组中的每个元素都是一个链表或为空。

哈希值转换为数组下标

在这里插入图片描述

//这就是hash函数,val就是key的哈希值,即val = key.hashCode()
//length 必须是2的整数幂
private int  hash(int val, int length){return val & (length - 1);}

节点

定义链表中的节点

public class Node2 {int hash;//hash对应数组下标Object key;Object value;Node2 next;
}

初始化

//数组元素的类型为Node2
Node2[] table;
int size;public SxtHashMap02() {table = new Node2[16];
}

put(Object key, Object value)

public void put(Object key, Object value){Node2 newNode = new Node2();newNode.hash = hash(key.hashCode(),table.length);newNode.key = key;newNode.value = value;newNode.next = null;Node2 last = null;//这个学习一下,记录最后一个节点int index = hash(key.hashCode(),table.length);if(table[index] == null){table[index] = newNode;size ++;}else{Node2 tmp = table[index];while(tmp != null){if(key.equals(tmp.key)){System.out.println("key重复了");tmp.value = value;return;}else {last = tmp;tmp = tmp.next;}}last.next = newNode;size ++;//size的增加与减少不要忘记}}

重写toString()

public String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for(int i = 0; i < table.length; i ++){Node2 temp = table[i];while(temp != null){sb.append(temp.key + ":" + temp.value + ",");temp = temp.next;}}//这个套路学一下,将最后改为']'sb.setCharAt(sb.length() - 1,']');return sb.toString();
}	

这个toString()有什么用呢?在使用system.out.println()打印的时候,就会用到toString()。

get(Object key)

//根据Map的底层原理,就十分简单
public Object get(Object key){int hashCode = key.hashCode();int hash = hash(hashCode,table.length);Node2 temp = table[hash];while(temp != null){if(temp.key.equals(key)) return temp.value;temp = temp.next;}return null;
}

增加泛化

public class Node3<K,V> {int hash;K key;V value;Node3 next;
}public class SxtHashMap03<K,V> {Node3[] table;int size;public SxtHashMap03() {table = new Node3[16];}public V get(K key){int hashCode = key.hashCode();int hash = hash(hashCode,table.length);V value = null;Node3 temp = table[hash];while(temp != null){if(temp.key.equals(key)){value = (V)temp.value;}temp = temp.next;}return value;}public void put(K key, V value){Node3 newNode = new Node3();newNode.hash = hash(key.hashCode(),table.length);newNode.key = key;newNode.value = value;newNode.next = null;Node3 last = null;int index = hash(key.hashCode(),table.length);if(table[index] == null){table[index] = newNode;size ++;}else{Node3 tmp = table[index];while(tmp != null){if(key.equals(tmp.key)){System.out.println("key重复了");tmp.value = value;return;}else {last = tmp;tmp = tmp.next;}}last.next = newNode;size ++;}}
}

remove(K key)

 public void remove(K key){int index = hash(key.hashCode(), table.length);Node3 temp = table[index];if(temp == null) return;if(temp.key.equals(key)){table[index] = temp.next;size --;return;}Node3 last = null;while(temp != null){if(temp.key.equals(key)){last.next = temp.next;size --;return;}last = temp;temp = temp.next;}
}

参考: 手工实现HashMap

http://www.mmbaike.com/news/59520.html

相关文章:

  • 福州做网站的公司宁波seo外包推广平台
  • 网站建设施工方案设计案例网
  • 百度站长平台网页版网络推广竞价是什么
  • 做得好的政府网站百度pc版网页
  • 网站 php java友情链接官网
  • 网站建设全套流程济南网络推广网络营销
  • 做外贸网站那个好佛山网站建设正规公司
  • joomla做类似赶集网的网站网站优化技巧
  • 加盟凡科建站宁波优化网页基本流程
  • 宝山php网站开发培训百度风云排行榜
  • 电商网站建设济南建网站看片应该搜什么关键词哪些词
  • 制作网站培训全国互联网营销大赛官网
  • 怎么申请公司网站百度app浏览器下载
  • 外网平面设计网站公司想做网络推广贵不
  • 网站关键词突然搜不到了百度seo排名在线点击器
  • b2b电子商务网站的盈利模式营销型网站建设目标
  • 西安建设市场诚信信息平台网站互联网营销推广方案
  • APP网站怎么做谷歌浏览器直接打开
  • 重庆企业网站建设哪家专业网站单向外链推广工具
  • 神马网站可以做兼职yandex引擎
  • 广州达美网站建设公司如何让百度快速收录
  • 提供邯郸做移动网站女生做sem还是seo
  • 珲春市建设局网站青岛seo推广专员
  • 宁波建设监理协会网站百度地图轨迹导航
  • 网站建设是属于软件吗如何拿高权重网站外链进行互换?
  • 企业建设网站的过程百度下载2022新版安装
  • 怎么做内网网站网站建设平台软件
  • Oss怎么做静态网站最近的新闻大事10条
  • 网站推广实施方案网络平台营销
  • 网站建设公司公司竞价推广招聘