上代码
package chapter01;
//简单写一下,加深理解 真实的源码比这个复杂的多 狗头保命
public class HashMap_ {
//初始数组容量16
Object[] objects = new Object[1 << 4];
/**
* put 方法
* @param key
* @param value
*/
public void put(Object key,Object value){
//根据key计算数组下标
int index = key.hashCode() % objects.length;
//这里% 可能是一个负数,处理一下
if (index < 0){
// System.out.println(index + " 为负值");
index = Math.abs(index);
// System.out.println("更改绝对值为: "+index);
}
//这里之前判断一下数组元素是否为null 多余的操作,为null直接就存里面了 也不用管
// if (objects[index] == null){
// objects[index] = new Node(new Entry(key,value),null);
// return;
// }
//这里用的头插法
objects[index] = new Node(new Entry(key,value), (Node) objects[index]);
}
/**
* get 方法
* @param key
* @return
*/
public Object get(Object key){
//根据key计算数组下标
int index = key.hashCode() % objects.length;
//这里% 可能是一个负数,处理一下
if (index < 0){
index = Math.abs(index);
}
//遍历链表 找到key相等的返回
for (Node e = (Node) objects[index]; e != null; e=e.getNext()){
Entry content = (Entry) e.content;
Object k = content.getKey();
if (k == key || k.equals(key)){
return content.value;
}
}
//没有返回null
return null;
}
//节点
class Node{
Object content;
Node next;
public Node(Object content, Node next) {
this.content = content;
this.next = next;
}
public Object getContent() {
return content;
}
public void setContent(Object content) {
this.content = content;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
//k,v封装的实例
class Entry{
Object key;
Object value;
public Entry(Object key, Object value) {
this.key = key;
this.value = value;
}
public Object getKey() {
return key;
}
public void setKey(Object key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@Override
public String toString() {
return "Entry{" +
"key=" + key +
", value=" + value +
'}';
}
}
}
Test
public class HashMapTest {
public static void main(String[] args) {
HashMap_ hashMap_ = new HashMap_();
for (int i = 0; i < 20; i++) {
hashMap_.put("java"+i,"jdk"+i);
}
System.out.println(hashMap_.get("java14"));
}
}
chapter01.HashMapTest
jdk14
Process finished with exit code 0