手写ConcurrentHashMap

分析了jdk1.7和1.8的ConcurrentHashMap源码之后,了解它的思想 尝试着自己手写ConcurrentHashMap

复制代码
package com.shanheyongmu.map;

import java.util.Hashtable;

/**
 * 手写ConcurrentHashMap
 * @param <K>
 * @param <V>
 */
public class ExtConcurrentHashMap<K,V> {
    /**
     * segments
     */
    private Hashtable<K,V>[] segments;

    public ExtConcurrentHashMap(){
        segments = new Hashtable[16];
        //注意懒加载形式
    }

    public void put(K k,V v){
        //第一次计算index 计算key存放哪个hashTable
        int segmentIndex = k.hashCode() & (segments.length -1);
        Hashtable<K, V> segment = segments[segmentIndex];
        if(segment==null){
           segment = new Hashtable<>();
        }
        segment.put(k,v);
        //注意这里需要赋值否则循环打印会为空
        segments[segmentIndex] = segment;
    }

    public V get(K k){
        int segmentIndex = k.hashCode() & (segments.length -1);
        Hashtable<K, V> segment = segments[segmentIndex];
        if(segment!=null){
           return segment.get(k);
        }
        return null;
    }

    public static void main(String[] args) {
        ExtConcurrentHashMap<String,String> concurrentHashMap = new ExtConcurrentHashMap<>();
        for (int i = 0; i < 10; i++) {
            concurrentHashMap.put(i+"",i+"");
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(concurrentHashMap.get(i+ ""));
        }
    }
}
复制代码

 

posted @   山河永慕~  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2021-02-05 提升NginxTLS/SSL HTTPS 性能的7条优化建议
2018-02-05 eclipse安装activiti designer
2018-02-05 idea上activiti插件的安装及使用
2018-02-05 activiti实战--第二章--搭建Activiti开发环境及简单示例
2018-02-05 activiti实战--第一章--认识Activiti
2017-02-05 【java设计模式】之 抽象工厂(Abstract Factory)模式
点击右上角即可分享
微信分享提示