Java learn 自定义的MyHashMap

主要实现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; 	
           
    	}
    	}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值