java实现简单的hashmap结构
- 注意:只是实现了在链表中的插入和读取,没有考虑红黑树的情况
- HashMap一般适用于读多写少的场景,即读取的多,插入的少,通常是一次写入,余下的操作基本上都是读取数据
确定每个“桶”中元素的结构
链表中每个节点的结构应该包含一个键,一个值,还有一个指向下一个节点的指针,所以“桶”中的结构应该如下:
代码如下:
public class Link2 <KEY,VALUE> {
public KEY key;
public VALUE value;
public Link2 next;
}
生成哈希表,并对哈希表进行存储和读取数据的操作
利用哈希值确定将数据插入到哪个“桶”中,同样利用哈希值确定要从哪个“桶”中查找数据并取出
public class HashMap2 <KEY,VALUE> {
//生成哈希表
public Link2<KEY,VALUE>[] data=new Link2[20];
public void put(KEY a,VALUE b){
//获得a的哈希值,根据哈希值将对象放到指定的桶中
int s=a.hashCode();
s=s%data.length;
Link2<KEY,VALUE> newnode=new Link2<>();
newnode.key=a;
newnode.value=b;
//若数组的对应位置为空,则可以直接插入
if(data[s]==null){
data[s]=newnode;
}else{
//否则,将对象插入到对应队列的头部
newnode.next=data[s];
data[s]=newnode;
}
}
public VALUE get(KEY a){
VALUE re=null;
int s=a.hashCode();
s=s%data.length;
//将数据取出
Link2<KEY,VALUE> newnode=data[s];
while(newnode!=null){
if(newnode.key==a){
re=newnode.value;
break;
}
newnode=newnode.next;
}
return re;
}
}
写完这些就可以进行测试啦!!