链表节点
package y.i.d;
public class Node2<K,V> {
int hash;
K key;
V value;
Node2<K,V> next;
}
实现
package y.i.d;
public class MyHashMap<K,V> {
Node2<K,V>[] table; //位桶数组
int size; //长度
public MyHashMap() {
this.table=new Node2[16]; // 实例的初始化
}
public void put(K key,V value) {
Node2<K,V> newNode = new Node2<>();
newNode.hash=myHash(key, table.length);
newNode.key=key;
newNode.value=value;
newNode.next=null;
Node2<K,V> temp=table[newNode.hash];
Node2<K,V> saveLastTemp=null;
boolean flag = false;
if(temp==null) {
table[newNode.hash]=newNode;
size++;
}else {
while(temp!=null) {
if(temp.key.equals(newNode.key)){
temp.value=value;
flag=true;
}else {
saveLastTemp=temp;
temp=temp.next;
}
}
if(!flag) {
saveLastTemp.next=newNode;
}
}
}
public int myHash(K key,int length) {
int hash = key.hashCode();
System.out.println(hash&(length-1));
// System.out.println(hash%length);
return hash&(length-1);
}
public String toString() {
StringBuilder sbBuilder =new StringBuilder();
sbBuilder.append("{");
for (int i = 0; i < table.length; i++) {
Node2<K,V> tempNode2 = table[i];
while(tempNode2!=null) {
sbBuilder.append(tempNode2.key+":"+tempNode2.value+",");
tempNode2=tempNode2.next;
}
}
sbBuilder.setCharAt(sbBuilder.length()-1, '}');
return sbBuilder.toString();
}
public Object get(K key) {
int hash = myHash(key, table.length);
Node2<K,V> tempNode2=table[hash];
V vObject=null;
while(tempNode2!=null) {
if(tempNode2.key.equals(key)) {
vObject= (V)tempNode2.value;
break;
}else {
tempNode2=tempNode2.next;
}
}
return vObject;
}
public static void main(String[] args){
MyHashMap<Integer,String> s1=new MyHashMap<>();
s1.put(10,"aa");
s1.put(20,"bb");
s1.put(30,"cc");
s1.put(11,"cc");
s1.put(26,"cc");
s1.put(27,"cc");
System.out.println(s1.get(50));
}
}