手写一个简单点的concurrentHashMap主要点:
1.要了解其结构:是一个大的HashTable集合 默认为16个小的hashtable
2.当存放一个数据的时候,是怎样进行的?index下表是怎样计算的?
3.当取值的时候怎样取?
package com.cao;
import java.util.Hashtable;
/**
* @author caowenbin
* @desc 手写concurrentHashMap
* 是一个大的HashTable集合 默认为16个小的hashtable
* @date 2022/8/18
*/
public class MyConcurrentHashMap<K,V> {
//创建一个大的hashtable,用来存放小的hashtable
private Hashtable<K,V>[] hashtables;
public MyConcurrentHashMap() {
//默认的情况下 初始化16个小的hashtable
hashtables = new Hashtable[16];
for (int i=0;i<hashtables.length;i++) {
hashtables[i]=new Hashtable<>();
}
}
public void put(K k,V v){
//首先要进行计算存放的index 0-15
int index = k.hashCode() % hashtables.length;
Hashtable<K, V> hashtable = hashtables[index];
hashtable.put(k,v);//将key和value存入到具体的小的hashtable中
}
public V get(K k){
//跟存放一样先要计算index
int index = k.hashCode()%hashtables.length;
return hashtables[index].get(k);
}
public static void main(String[] args) {
MyConcurrentHashMap<String,String>concurrentHashMap = new MyConcurrentHashMap<>();
concurrentHashMap.put("name","caowenbin");
concurrentHashMap.put("age","25");
String name = concurrentHashMap.get("name");
System.out.println(name);
String age = concurrentHashMap.get("age");
System.out.println(age);
}
}
运行如下: