主要实现HashMap 的两个方法——put(); 和 get();
但是 当我新建一个类进行测试的时候 告知我java.lang.StackOverflowError
就无语…
MyHashMap 里有之前写好的自定义hashcode方法 自定义的MyHashMap 完全是按照 HashMap键值对理解进行复刻的
组成 —— 一个接口 包含put 和 get 两个方法 定义一个类用于进行实例化构造有参构造方法进行键值对的定义 之后就是MyHashMap 这个类来实现接口
interface:
public interface IHashMap {
public void put(String key,Object object);
public Object get(String key);
}
任意类:
public class Entry {
public Object key;
public Object value;
public Entry(Object key,Object value)
{
super();
this.key=key;
this.value=value;
}
public String toString()
{
return "[key="+key+",value="+value+"]";
}
}
MyHashMap:
import java.util.*;
import test.Entry;
public class MyHashMap implements IHashMap {
LinkedList<Entry>[] sd=new LinkedList[2000];
MyHashMap sd1=new MyHashMap();
public void put(String key,Object object)
{
int hashcode=sd1.hashcode(key);
if(sd[hashcode]==null)
{
Entry e=new Entry(key,object);
sd[hashcode]=new LinkedList();
sd[hashcode].add(e);
}
else
{
Entry e=new Entry(key,object);
sd[hashcode].addLast(e);
}
}
public Object get(String key)
{
int b=sd1.hashcode(key);
Object o=null;
if(sd[b]==null)
{
return null;
}
else
{
for (Entry en : sd[b]) {
if(en.key.equals(key))
{
o=en.value;
break;
}
else
return null;
}
return o;
}
}
public static String randomString()
{
String st1="";
String st="";
int h=(int)(Math.random()*10)+2;
System.out.println("这次的随机值:"+h);
for (short i = 20; i < 126; i++) {
char ch=(char)i;
String st2=Character.toString(ch);
st1+=st2;
}
if(h>=2&&h<=8)
{
for (int i = 0; i < h; i++) {
int h1=(int)(Math.random()*100);
String st3=Character.toString(st1.charAt(h1));
st+=st3;
}
}
return st;
}
public static int hashcode(String str)
{
int n=str.length();
char ch;
int n1=0;
if(n==0)
return 0;
else {
for (int i = 0; i < n; i++) {
ch=str.charAt(i);
n1+=ch;
}
if(n1*23<0)
{
if(-n1*23>1999)
{
return (-n1*23)%2000;
}
return -n1*23;
}
else if(n1*23>1999)
{
return n1*23%2000;
}
else
{
return n1*23;
}
}
}
}