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的使用(存储+查找)相关推荐

  1. 手写迷你版HashMap

    最近看了一些面试题,感觉网上好像有挺多公司比较喜欢让面试者手写HashMap,说实话理解JDK HashMap源码还是很需要时间的.打开看了一下HashMap源代码,将近2400行代码,前两位作者乃大 ...

  2. 手写简易版链表及原理分析

    好多人都觉得为什么要自己写这样的数据结构,变成里面不是有吗?为什么要去写,有这个疑问,其实这个疑问这我的脑海中也存在了很长一段时间,本人是学习java编程的,直接看java的集合框架不行吗?这个时候如 ...

  3. 解鞍卸甲——手写简易版Spring框架(终):使用三级缓存解决循环依赖问题

    什么是三级缓存 按照目前我们实现的 Spring 框架,是可以满足一个基本需求的,但如果你配置了A.B两个Bean对象互相依赖,那么立马会抛出 java.lang.StackOverflowError ...

  4. spring源码分析01-(前期准备)spring核心原理解析和手写简易spring

    1.本文主要介绍内容 本文会把Spring中核心知识点大概解释下.可以对Spring的底层有一个整体的大致了解.主要内容包括: 手写简易spring框架,帮助更好理解spring. 代码点击链接自取 ...

  5. 手写简易WEB服务器

    手写简易WEB服务器 今天我们来写一个类似于Tomcat的简易服务器.可供大家深入理解一下tomcat的工作原理,本文仅供新手参考,请各位大神指正! 首先我们要准备的知识是: Socket编程 HTM ...

  6. React,手写简易redux(二)- By Viga

    React,手写简易redux(二) 本章节会完成一个简易的redux实现 该系列内容会逐步实现简易的redux 使用技术栈:vite+react 该系列感谢@方应杭 的react教学视频 目录 实现 ...

  7. 手写简单版 Promise

    Promise作为ES6新增的函数,帮助我们解决了回调地狱的难题,让我们的异步代码可以更加清晰简洁,作为一名前端程序员,手写简单版Promise应该是必备的技能.接下来不多说,直接上代码了. clas ...

  8. 手写迷你版 Tomcat - Minicat

    大家也可以关注我的公众号,文章也会同步更新,当然,公众号还会有一些资源可以分享给大家~ 手写迷你版 Tomcat - Minicat Minicat 的目标 我们可以通过浏览器客户端发送 http 请 ...

  9. 手写实现一个HashMap

    手写实现一个HashMap 前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想 ...

最新文章

  1. 新书上市|鲁智深和镇关西是怎么吵起来的?
  2. vertx核心类之VertxImpl
  3. leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
  4. [云炬创业基础笔记]第二章创业者测试3
  5. mysql 小类型_mysql 数据类型
  6. MySQL添加新用户、为用户创建数据库、为新用户分配权限
  7. JEECG Excel 实体类
  8. Database2Sharp之混合型Winform框架代码生成
  9. python在线发音-Python如何实现文本转语音
  10. ASP.NET MVC中的控制器激活与反射之间的联系(帮助理解)
  11. AR/VR learning (2)--unity3D在android 上的手势识别与检测
  12. 【RDKit】Python化学包RDkit的教程
  13. 简单有限元分析python实现——二维1单元4节点刚度矩阵求解然后得到4个节点的位移和力
  14. 虚拟存储器的基本概念
  15. 用crontab每隔1分钟执行一个命令行脚本
  16. 第五章:Sharding-JDBC 自定义分片算法
  17. swift实战-豆瓣电台
  18. 将knif4j快速集成到springboot项目中
  19. 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(1):显示标准
  20. 一种适用于车身控制器的HIL实时测试系统

热门文章

  1. 软件工程-东北师大站-第十一次作业(PSP)
  2. Chapter 04-Using Conversion Functions and Conditional Expressions-Conditional Expressions
  3. POJ-2226 Muddy Fields 最小点集覆盖
  4. ASP.NET MVC 2 正式版发布了的
  5. HDU2015 偶数求和【入门】
  6. HDU2011 多项式求和【数列】
  7. HDU1568 Fibonacci【斐波拉契数列】
  8. 第二届太原理工大学程序设计新生赛预赛(公开赛)题解
  9. UVA10284 POJ2512 Chessboard in FEN【国际象棋】
  10. 《程序设计技术》第四章例程