学习目标
更新于(2018-7-13 18:06:30)
自己实现一个HashMap的部分方法,更好的理解HashMap类的底层结构!
/**
* 自定义Entry类,包含key-value
*/
public class Entry {
Object key;
Object value;
public Entry(Object key, Object value) {
super();
this.key = key;
this.value = value;
}
}
/**
* 自定义HashMap类 - 内部调用LinkedList
*/
public class MyHashMap {
LinkedList[] arr = new LinkedList[999]; // 模拟测试,不考虑扩容问题
private int size; // 集合大小
/**
* 返回集合大小
*/
public int size() {
return size;
}
/**
* 返回集合是否为空
*/
public boolean isEmpty() {
return size == 0;
}
/*
* 新增元素,传参(key,value)
*/
public void put(Object key,Object value) {
Entry entry = new Entry(key,value); // 实例化Entry类
int num = key.hashCode()%arr.length; // key唯一hashCode
/**
* 如果num为空,LinkedList添加元素
*/
if(arr[num] == null) {
LinkedList list = new LinkedList();
arr[num] = list;
list.add(entry);
}else {
/**
* 如果num不为空,LinkedList覆盖元素,比较key,若key相等覆盖value
*/
LinkedList list = arr[num];
for(int i = 0; i < list.size(); i++) {
Entry newEntry = (Entry) list.get(i);
if(newEntry.key.equals(key)) {
newEntry.value = value;
}
}
}
arr[num].add(entry);
size++;
}
/**
* 根据key获取元素
*/
public Object get(Object key) {
int num = key.hashCode()%arr.length; // key唯一hashCode
/**
* 如果num不为空,比较key,若key相等取出相应的value
*/
if(arr[num] != null) {
LinkedList list = arr[num];
for(int i = 0; i < list.size(); i++) {
Entry entry = (Entry) list.get(i);
if(entry.key.equals(key)) {
return entry.value;
}
}
}
return null;
}
}