Java集合类Hashtable实现细节
来源:互联网 发布:华为 移动数据变灰 编辑:程序博客网 时间:2024/05/21 08:59
主要方法
HashTable的API对外提供了许多方法,这些方法能够很好帮助我们操作HashTable,但是这里我只介绍两个最根本的方法:put、get。
首先我们先看put方法:将指定 key
映射到此哈希表中的指定 value
。注意这里键key和值value都不可为空。
put方法的整个处理流程是:计算key的hash值,根据hash值获得key在table数组中的索引位置,然后迭代该key处的Entry链表(我们暂且理解为链表),若该链表中存在一个这个的key对象,那么就直接替换其value值即可,否则在将改key-value节点插入该index索引位置处。如下:
首先我们假设一个容量为5的table,存在8、10、13、16、17、21。他们在table中位置如下:
然后我们插入一个数:put(16,22),key=16在table的索引位置为1,同时在1索引位置有两个数,程序对该“链表”进行迭代,发现存在一个key=16,这时要做的工作就是用newValue=22替换oldValue16,并将oldValue=16返回。
在put(33,33),key=33所在的索引位置为3,并且在该链表中也没有存在某个key=33的节点,所以就将该节点插入该链表的第一个位置。
注意:HashTable的扩容操作,在put方法中,如果需要向table[]中添加Entry元素,会首先进行容量校验,如果容量已经达到了阀值,HashTable就会进行扩容处理rehash()。
HashTable与HashMap的区别
HashTable和HashMap存在很多的相同点,但是他们还是有几个比较重要的不同点。
第一:我们从他们的定义就可以看出他们的不同,HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。
第二:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。
第三:Hashtable的方法是同步的,而HashMap的方法不是。即是说Hashtable是线程安全的,而HashMap是线程不安全的。
- Java集合类Hashtable实现细节
- Java集合实现细节
- Java集合类HashSet实现细节
- Java集合类Treeset实现细节
- Java集合类ArrayList实现细节
- JAVA集合Hashtable实现类Properties简单练习
- 【Java集合类】HashTable解析
- 【java集合】自己实现简易的Hashtable
- 常见java集合的实现细节
- redis hashTable实现细节(1)
- javascript 实现hashtable集合
- 类似Java Hashtable的Js集合类
- java集合类HashTable、HashMap比较
- Java集合类HashMap、HashTable、TreeMap详解
- Java源码集合类Hashtable学习
- java集合TreeMap、Hashtable
- Java集合之Hashtable
- java集合------HashTable
- React中的props和state
- Android 编程下 Touch 事件的分发详解
- 输入一个日期,求该日期是当年的第多少天
- LeetCode88 Merge two sort array
- hadoop源码学习之namenode启动
- Java集合类Hashtable实现细节
- 作业
- Git创建分支以及合并代码
- 史上最简单的SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix Turbine)
- Git代理的设置与取消
- MapleStory移植-技术路线选择
- C++单链表求解约瑟夫环
- 漫步数理统计十九——独立随机变量
- 移动端多余文字显示为...适合webkit内核