手写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+ "")); } } }
早年同窗始相知,三载瞬逝情却萌。年少不知愁滋味,犹读红豆生南国。别离方知相思苦,心田红豆根以生。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)模式