首页 > 编程语言 >HashTable源码分析

HashTable源码分析

时间:2023-03-26 20:45:54浏览次数:37  
标签:分析 key 链表 源码 HashTable 数组 put HashMap

HashTable是一个线程安全的HashMap,是jdk早期版本的产物,但其效率较低

1.初始化

可以看到,与HashMap不同,HashTable无参构造是默认会构造一个容量为11的数组,而HashMap在无参构造初始化时不会构造数组,只有在第一个put后才会构造容量为16的数组

2.put方法

与CurrentHashMap不同,HashTable的处理方法比较粗暴,直接在put方法上加锁,而CurrentHashMap是采用CAS或者对操作的节点对象加锁

HashTable不允许key或value为空,而HashMap可以,下面是HashMap的代码

static final int hash(Object key) {
        int h;
    	//如果key为NULL那么哈希值为0
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

此外,HashTable的底层是数组+链表,当哈希冲突时,只采用链表的方式,而HashMap是树组+链表+红黑树

其他方法大致相同,就不分析了

总结

1.HashTable无参构造在初始化时就创建一个长度11的数组,而HashMap无参构造在第一次put后创建长度为16的数组
2.HashTable不允许key和value为空,而HashMap可以
3.HashTable底层为数组+链表,而HashMap底层为数组+链表+红黑树
4.HashTable解决线程安全的方法是在put等方法上添加synchronized,锁住的是整个HashTable,而CurrentHashMap则是对操作的节点采用CAS或synchronized

标签:分析,key,链表,源码,HashTable,数组,put,HashMap
From: https://www.cnblogs.com/wangstudyblog/p/17259476.html

相关文章

  • 家用热水器用户行为分析与事件识别
    importpandasaspdimportmatplotlib.pyplotaspltinputfile=r'E:\sj\original_data.xls'#输入的数据文件data=pd.read_excel(inputfile)#读取数据#查看有......
  • 第五周数据分析实训
    importpandasaspdimportmatplotlib.pyplotaspltimportnumpyasnpinputfile='E:\桌面\data\original_data.xls'#'./demo/data/original_data.xls'#输入的......
  • 分析热水器
    1importpandasaspd2importmatplotlib.pyplotasplt34inputfile='original_data.xls'#'#输入的数据文件5data=pd.read_excel(inputfile)#读......
  • 第八篇:Spring源码-DI的过程
    Spring源码-DI的过程  接下来我们分析下Spring源码中Bean初始化过程中的DI过程。也就是属性的依赖注入。一、构造参数依赖1.如何确定构造方法  在Spring中生成Bean实例......
  • 第九篇:Spring源码-AOP分析
    Spring源码-AOP分析一、手写AOP回顾  本文我们开始讲解Spring中的AOP原理和源码,我们前面手写了AOP的实现,了解和自己实现AOP应该要具备的内容,我们先回顾下,这对我们理解Spri......
  • 选股公式代写 MACD佛手二次翻红公式源码
    原理解析:输出DIF:收盘价的6日指数移动平均-收盘价的19日指数移动平均,,NODRAW输出DEA:DIF的9日指数移动平均,NODRAW输出平滑异同平均:2*(DIF-DEA),COLORSTICK当满足条件MAC......
  • Qt源码阅读(二) moveToThread
    Qt源码分析之moveToThread这一次,我们来看Qt中关于将一个QObject对象移动至一个线程的函数moveToThread目录Qt源码分析之moveToThreadQt使用线程的基本方法源码分析一些......
  • 【LeetCode动态规划#05】背包问题的理论分析(基于代码随想录的个人理解,多图)
    背包问题问题描述背包问题是一系列问题的统称,具体包括:01背包、完全背包、多重背包、分组背包等(仅需掌握前两种,后面的为竞赛级题目)下面来研究01背包实际上即使是最经典......
  • PTA实验1~3分析及总结
    1.前言    自接触面向对象的程序设计这门课以来,已经完成了三次pta上的实验作业了,在这里对前面的练习做一些分析,同时也总结一些经验。    OK,首先,在难度......
  • 性能对比分析
    packageedu.wtbu;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;//分析性能问题publicclassDemo01{publicstaticvoid......