您的位置:首页 > 其它

107-109_容器_自己实现HashMap_Map底层实现_哈希算法实现_使用数组和链表

2017-07-31 13:32 357 查看
package com.zhushen.map;

import java.util.LinkedList;

/**
* 自定义Map的升级版
* 1.提高查询效率
* 2.HashMap的底层实现是数组+链表(链表数组)
* @author zhushen
*
*/
public class MyHashMap {
class  Entry {
Object key;
Object value;

public Entry(Object key, Object value) {
super();
this.key = key;
this.value = value;
}
}

@SuppressWarnings("unchecked")
LinkedList<Object>  arr[]  = new LinkedList[999];//HashMap的底层结构:数组+链表

int size;
public void put(Object key,Object value){
Entry e=new Entry(key, value);
int hash=key.hashCode();
hash=hash<0?-hash:hash;
int temp=key.hashCode()%999;
if(arr[temp]==null){
LinkedList<Object> list=new LinkedList<Object>();
arr[temp]=list;
list.add(e);
}else{
for(int i=0;i<arr[temp].size();i++){
Entry e2=(Entry) arr[temp].get(i);
if(e2.key.equals(key)){
e2.value=value; //键值重复直接覆盖
}
}
arr[temp].add(e);
}
}
public Object get(Object key){
//return arr[key.hashCode()%999];
int temp=key.hashCode()%999;
if(arr[temp]!=null){
for(int i=0;i<arr[temp].size();i++){
Entry e=(Entry) arr[temp].get(i);
if(e.key.equals(key)){
return e.value;
}
}
}
return null;
}
public static void main(String[] args) {
MyHashMap m = new MyHashMap();
m.put("高琪", new Wife("杨幂"));
m.put("高琪", new Wife("李四"));
Wife w = (Wife) m.get("高琪");
System.out.println(w.name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: