java hash简易_Java手写简易版HashMap的使用(存储+查找)

这篇博客介绍了如何用Java手写一个简易版的HashMap,包括基本结构、put方法存储键值对、myhash方法计算哈希值、重写toString方法打印Map内容以及get方法查找键值对。文章还展示了增加泛型后的完整代码。
摘要由CSDN通过智能技术生成

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();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值