package com.jt.test;
import java.util.HashMap;
public class MyHashMap {
public Node[] HeadNode = new Node[11];
public int size = 0;
public float loadFactor = 0.75f;
public class Node {
Node next;
Object key;
Object value;
public Node(Object key, Object value) {
this.key = key;
this.value = value;
}
public Object getKey() {
return key;
}
public Object getValue() {
return value;
}
}
public void put(Object key, Object value) {
if (size * 1.0 / HeadNode.length > loadFactor)
rehash();
int index = hash(key, HeadNode.length);
Node node = new Node(key, value);
input(node, HeadNode, index);
}
public void input(Node node, Node[] headNode, int index) {
if (HeadNode[index] == null) {
HeadNode[index] = node;
} else {
Node temp = HeadNode[index];
if (node.key == temp.key) {
System.out.println("repeat" + temp.key);
} else {
while (temp.next != null) {
temp = temp.next;
}
}
temp.next = node;
}
}
public int hash(Object key, int length) {
int index = -1;
if (key != null) {
char[] c = key.toString().toCharArray();
int tokey = 0;
for (int i = 0; i < c.length; i++) {
tokey += c[i];
}
index = tokey % length;
}
return index;
}
public void rehash() {
Node[] newHeadNode = new Node[HeadNode.length * 20];
for (int i = 0; i < HeadNode.length; i++) {
if (HeadNode[i] != null) {
int newIndex = hash(HeadNode[i].key, HeadNode.length * 2);
Node rehashHeadNode = new Node(HeadNode, newIndex);
input(rehashHeadNode, newHeadNode, newIndex);
Node temp = HeadNode[i];
while (temp.next != null) {
temp = temp.next;
Node rehashNextNode = new Node(temp.key, temp.value);
int nextindex = hash(temp.key, newHeadNode.length);
input(rehashNextNode, newHeadNode, newIndex);
}
}
}
HeadNode = newHeadNode;
}
public Object getValue(Object key) {
int index = hash(key, HeadNode.length);
Node temp = HeadNode[index];
if (temp == null) {
return null;
} else {
if(key == temp.key)
return temp.value;
while (temp.next != null) {
temp = temp.next;
if (key == temp.key)
return temp.value;
}
}
return null;
}
public int size(){
return size;
}
public boolean isEmpty(){
return size == 0;
}
public static void main(String[] args) {
MyHashMap mhm = new MyHashMap();
HashMap<Object, Object> hm = new HashMap<>();
long s3 = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
hm.put(i + "", i);
}
for(int i = 0; i < 10000; i++){
hm.get(i);
}
long s4 = System.currentTimeMillis();
System.out.println("JDKHashMap useTime: " + (s4 - s3));
long s1 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
mhm.put(i + " ", i);
}
for (int i = 0; i < 10000; i++) {
mhm.getValue(i);
}
long s2 = System.currentTimeMillis();
System.out.println("MyHashMap useTime:" + (s2 - s1));
}
}
HashMap 实现
最新推荐文章于 2022-04-02 14:31:34 发布