public class MyHashMap {
private int size = 8;
private int number = 0;// 存储的节点的个数
private ArrayList<LinkedList> array_head = new ArrayList<LinkedList>(size);
public MyHashMap() {
super();
for (int i = 0; i < size; i++) {
LinkedList list = new LinkedList();// 哈希数组中初始化存储的为空链表头
array_head.add(list);// 初始化的时候就将空节点头添加到数组中去
}
}
/**
* 根据 键值对 生成节点 将节点放入哈希表中
*
* @param key
* 键
* @param value
* 值
*/
public void put(Object key, Object value) {
if (containsKey(key) == true) {// 判断是否已经存在该key值,如果存在,直接替换该value值
replace(key, value);
} else {// 不存在,创建一个新的key值
if (number / size == 10) {
rehash();
}
number++;
Node node = new Node(key, value);
int code = hashcode(key.toString());// 得到哈希码
int index = locate(code);// 得到该哈希码在对应哈希数组中的位置
public boolean containsKey(Object key) {
// 根据key值找到数组对应位置
int code = hashcode(key.toString());
int index = locate(code);
LinkedList list = array_head.get(index);
for (int i = 0; i < list.size(); i++) {
Node node = (Node) list.get(i);
if (node.getKey().equals(key)) {
return true;
}
node = node.getNext();
}
return false;
}
/**
* 哈希表中含value值,返回true
*
* @param value
* @return
*/
public boolean containsValue(Object value) {
// 找到该对应位置的链表
for (int i = 0; i < size; i++) {
LinkedList list = array_head.get(i);
// 从头遍历,找到与键key对应节点的value值进行输出
for (int j = 0; j < list.size(); j++) {
Node node = (Node) list.get(j);
while (node != null) {
if (node.getValue().equals(value)) {
return true;
}
node = node.getNext();
}
}
}
return false;
}
private void rehash() {
}
/**
* 计算字符串的哈希码 ASCII码相加
*
* @param s
* @return
*/
public int hashcode(String s) {
int k = 0;
for (int i = 0; i < s.length(); i++) {
k += s.charAt(i);
}
return k;
}
/**
* 得到哈希码对应在数组中的位置
*
* @param k
* @return
*/
public int locate(int k) {
int m = k % size;
return m;
}
/**
* 返回存贮节点的个数
*/
public int size() {
return number;
}