欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-02-03 18:23:45|栏目:JAVA代码|点击:

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<table.length;++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<K,V> {
 int hash;
 K key;
 V value;
 Node next;
}
package com.liuyuhe;

public class MyHashMap<K,V> {
 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<table.length;++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中List集合及其实现类的方法详解

栏    目:JAVA代码

下一篇:Java高级特性(基础)

本文标题:Java手写简易版HashMap的使用(存储+查找)

本文地址:http://www.codeinn.net/misctech/55931.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有