java hash简易_Java手写简易版HashMap的使用(存储+查找)
hashmap的基本结构
package com.liuyuhe;
public class node {
int hash;
object key;
object value;
node next;
}
package com.liuyuhe;
public class myhashmap {
node[] table; //位桶数组
int size; //存放键值对的个数
public myhashmap() {
table=new node[16];
}
}
put()方法存储键值对
public void put(object key,object value) {
node newnode = new node();
newnode.hash=myhash(key.hashcode(),table.length);
newnode.key=key;
newnode.value=value;
newnode.next=null;
node temp = table[newnode.hash];
node iterlast=null;
if(temp==null) {
table[newnode.hash]=newnode;
}else {
while(temp!=null) {
if(temp.key.equals(key)) {
temp.value=value;
return;
}else {
iterlast=temp;
temp=temp.next;
}
}
iterlast.next=newnode;
}
++size;
}
public int myhash(int v,int length) {
system.out.println("hash in myhash: "+(v&(length-1)));
return v&(length-1);
}
重写tostring()方法打印map内容
@override
public string tostring() {
stringbuilder sb = new stringbuilder();
sb.append("{");
boolean isfirst=true;
//遍历数组
for(int i=0;i
//遍历链表
node temp = table[i];
while(temp!=null) {
if(isfirst) {
isfirst=false;
sb.append(temp.key+":"+temp.value);
}else {
sb.append(","+temp.key+":"+temp.value);
}
temp=temp.next;
}
}
sb.append("}");
return sb.tostring();
}
get()方法查找键值对
public object get(object key) {
int hash=myhash(key.hashcode(),table.length);
object value=null;
if(table[hash]!=null) {
node temp=table[hash];
while(temp!=null) {
if(temp.key.equals(key)) {
value=temp.value;
break;
}else {
temp=temp.next;
}
}
}
return value;
}
增加泛型(完整代码)
package com.liuyuhe;
public class node {
int hash;
k key;
v value;
node next;
}
package com.liuyuhe;
public class myhashmap {
node[] table; //位桶数组
int size; //存放键值对的个数
public myhashmap() {
table=new node[16];
}
public void put(k key,v value) {
node newnode = new node();
newnode.hash=myhash(key.hashcode(),table.length);
newnode.key=key;
newnode.value=value;
newnode.next=null;
node temp = table[newnode.hash];
node iterlast=null;
if(temp==null) {
table[newnode.hash]=newnode;
}else {
while(temp!=null) {
if(temp.key.equals(key)) {
temp.value=value;
return;
}else {
iterlast=temp;
temp=temp.next;
}
}
iterlast.next=newnode;
}
++size;
}
@suppresswarnings("unchecked")
public v get(k key) {
int hash=myhash(key.hashcode(),table.length);
v value=null;
if(table[hash]!=null) {
node temp=table[hash];
while(temp!=null) {
if(temp.key.equals(key)) {
value=(v)temp.value;
break;
}else {
temp=temp.next;
}
}
}
return value;
}
public int myhash(int v,int length) {
system.out.println("hash in myhash: "+(v&(length-1)));
return v&(length-1);
}
@override
public string tostring() {
stringbuilder sb = new stringbuilder();
sb.append("{");
boolean isfirst=true;
//遍历数组
for(int i=0;i
//遍历链表
node temp = table[i];
while(temp!=null) {
if(isfirst) {
isfirst=false;
sb.append(temp.key+":"+temp.value);
}else {
sb.append(","+temp.key+":"+temp.value);
}
temp=temp.next;
}
}
sb.append("}");
return sb.tostring();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!
java hash简易_Java手写简易版HashMap的使用(存储+查找)相关推荐
- 手写迷你版HashMap
最近看了一些面试题,感觉网上好像有挺多公司比较喜欢让面试者手写HashMap,说实话理解JDK HashMap源码还是很需要时间的.打开看了一下HashMap源代码,将近2400行代码,前两位作者乃大 ...
- 手写简易版链表及原理分析
好多人都觉得为什么要自己写这样的数据结构,变成里面不是有吗?为什么要去写,有这个疑问,其实这个疑问这我的脑海中也存在了很长一段时间,本人是学习java编程的,直接看java的集合框架不行吗?这个时候如 ...
- 解鞍卸甲——手写简易版Spring框架(终):使用三级缓存解决循环依赖问题
什么是三级缓存 按照目前我们实现的 Spring 框架,是可以满足一个基本需求的,但如果你配置了A.B两个Bean对象互相依赖,那么立马会抛出 java.lang.StackOverflowError ...
- spring源码分析01-(前期准备)spring核心原理解析和手写简易spring
1.本文主要介绍内容 本文会把Spring中核心知识点大概解释下.可以对Spring的底层有一个整体的大致了解.主要内容包括: 手写简易spring框架,帮助更好理解spring. 代码点击链接自取 ...
- 手写简易WEB服务器
手写简易WEB服务器 今天我们来写一个类似于Tomcat的简易服务器.可供大家深入理解一下tomcat的工作原理,本文仅供新手参考,请各位大神指正! 首先我们要准备的知识是: Socket编程 HTM ...
- React,手写简易redux(二)- By Viga
React,手写简易redux(二) 本章节会完成一个简易的redux实现 该系列内容会逐步实现简易的redux 使用技术栈:vite+react 该系列感谢@方应杭 的react教学视频 目录 实现 ...
- 手写简单版 Promise
Promise作为ES6新增的函数,帮助我们解决了回调地狱的难题,让我们的异步代码可以更加清晰简洁,作为一名前端程序员,手写简单版Promise应该是必备的技能.接下来不多说,直接上代码了. clas ...
- 手写迷你版 Tomcat - Minicat
大家也可以关注我的公众号,文章也会同步更新,当然,公众号还会有一些资源可以分享给大家~ 手写迷你版 Tomcat - Minicat Minicat 的目标 我们可以通过浏览器客户端发送 http 请 ...
- 手写实现一个HashMap
手写实现一个HashMap 前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想 ...
最新文章
- 新书上市|鲁智深和镇关西是怎么吵起来的?
- vertx核心类之VertxImpl
- leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
- [云炬创业基础笔记]第二章创业者测试3
- mysql 小类型_mysql 数据类型
- MySQL添加新用户、为用户创建数据库、为新用户分配权限
- JEECG Excel 实体类
- Database2Sharp之混合型Winform框架代码生成
- python在线发音-Python如何实现文本转语音
- ASP.NET MVC中的控制器激活与反射之间的联系(帮助理解)
- AR/VR learning (2)--unity3D在android 上的手势识别与检测
- 【RDKit】Python化学包RDkit的教程
- 简单有限元分析python实现——二维1单元4节点刚度矩阵求解然后得到4个节点的位移和力
- 虚拟存储器的基本概念
- 用crontab每隔1分钟执行一个命令行脚本
- 第五章:Sharding-JDBC 自定义分片算法
- swift实战-豆瓣电台
- 将knif4j快速集成到springboot项目中
- 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(1):显示标准
- 一种适用于车身控制器的HIL实时测试系统
热门文章
- 软件工程-东北师大站-第十一次作业(PSP)
- Chapter 04-Using Conversion Functions and Conditional Expressions-Conditional Expressions
- POJ-2226 Muddy Fields 最小点集覆盖
- ASP.NET MVC 2 正式版发布了的
- HDU2015 偶数求和【入门】
- HDU2011 多项式求和【数列】
- HDU1568 Fibonacci【斐波拉契数列】
- 第二届太原理工大学程序设计新生赛预赛(公开赛)题解
- UVA10284 POJ2512 Chessboard in FEN【国际象棋】
- 《程序设计技术》第四章例程