手动实现HashMap3_实现toString方法,方便查看Map中的键值对信息
toString方法代码块
public String toString() {
StringBuilder sb = new StringBuilder('[');
for(int i=0;i<table.length;i++) {
Node2 temp = table[i];
while(temp!=null) {
sb.append(temp.key+":"+temp.value+",");
temp = temp.next;
}
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
实现代码块
public class SxtHashMap3 {
Node2[] table;//位桶数组 bucket array
int size;//存放键对个数
public SxtHashMap3() {
table = new Node2[16];//长度一般为2的整数次幂
}
public void put(Object key,Object value) {
boolean repeat = false;
Node2 newNode = new Node2();
newNode.hash = myHash(key.hashCode(),table.length);
newNode.key = key;
newNode.value = value;
Node2 temp = table[newNode.hash];
Node2 LinkedLast = null;//存储最后一个节点
//当前节点为空则直接放入
if(temp==null) {
repeat = true;
table[newNode.hash] = newNode;
}else {
while(temp!=null) {
//判断key是否重复,若重复则覆盖(只覆盖value值,next,key,hash值不变)
if(temp.key.equals(key)) {
temp.value = value;
}else {
//若不重复则遍历
LinkedLast = temp;
temp = temp.next;
}
}
}
if(!repeat) {
LinkedLast.next = newNode;
}
}
public static int myHash(int v,int length) {
return v&(length-1);
}
public static void main(String[] args) {
SxtHashMap3 map2 = new SxtHashMap3();
//找出50内hash值相同的key值
for(int i=0;i<50;i++) {
System.out.println(i+"---"+myHash(i, 16));
}//17,33,49hash值相同
map2.put(17, "阿狸");
map2.put(33, "阿卡丽");
map2.put(49, "瑞雯");
System.out.println(map2);
}
public String toString() {
StringBuilder sb = new StringBuilder('[');
for(int i=0;i<table.length;i++) {
Node2 temp = table[i];
while(temp!=null) {
sb.append(temp.key+":"+temp.value+",");
temp = temp.next;
}
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
}
效果