当前位置: 首页 > 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.ds6.com.cn/news/53017.html

相关文章:

  • 网站建设云推广赚钱的平台有哪些
  • 网站群建设报价seo简单优化
  • 郑州艾特软件 网站建设十大技能培训机构排名
  • 网站建设审核需要多长时间优化营商环境个人心得体会
  • 长春制作公司网站怎么进行推广
  • 做购物网站步骤百度官方优化指南
  • 网站如何做权重搜索引擎平台
  • 外贸网站建设报价国际新闻报道
  • 免费做初级会计试题网站有哪些海外市场推广方案
  • 国外做汽配的网站朋友圈广告推广文字
  • 浙江建设工程信息网站微信推广软件
  • 外汇局网站做结汇申报重庆森林壁纸
  • 网页设计网站测试宁波seo推荐推广平台
  • 建站都需要什么黄石seo
  • 网络运营岗位职责英文谷歌seo
  • 阳谷县住房建设委网站自助建站平台
  • 情女照片做杯子网站百度福州分公司
  • 校园招聘网站策划书网络推广公司联系方式
  • 怎么在服务器上面建设网站建站平台哪个比较权威
  • 网页设计与网站建设期末考试题安卓系统最好优化软件
  • 汕头在线制作网站免费b站推广网址有哪些
  • 英文建站多少钱营销网站建设教学
  • 网站不收录怎么办搜索引擎营销的方法不包括
  • wordpress 弹出搜索框合肥关键词优化平台
  • 专业网站建设渠道做一个公司网页多少钱
  • 医疗网站建设免费企业网站优化报告
  • 怎么学习网站建设百度如何收录网站
  • 佛山seo全网营销北京seo方法
  • 在门户网站中seo优化策略
  • 烟台网站建设方案托管做网站seo怎么赚钱