博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java核心基础--jdk源码分析学习--Hashtable
阅读量:2059 次
发布时间:2019-04-29

本文共 907 字,大约阅读时间需要 3 分钟。

java.util.Hashtable

1. 内部由内部类Entry存储单节点数据,单向链表(hash冲突时往后放)。table为Entry数组,hash后决定Entry存在table[?]

private static class Entry
implements Map.Entry
{Entry
next;

2. Hashtable初始默认容量11,可容纳11 * 0.75个节点

public Hashtable() {    this(11, 0.75f);}

3. get() put()都是synchronized的,区别HashMap

4. put()的key与value都不能是null

5. index为hash值, 然后判断table[index],为空直接填入,否则遍历,如果找到key相同就更新值返回原值,或遍历至表尾添加

int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;//tab为table数组,tab.length为Hashtable的容量

6. rehash与扩容, rehash()发生, 当Hashtable存的数量大于容量*负载因子(默认11 * 0.75),发生扩容,为原容量2倍+1,原数据重新hash放入扩容后的table里【移动的是引用】【开销在new 新容量的table】

int newCapacity = (oldCapacity << 1) + 1; //扩容Entry
[] newMap = new Entry
[newCapacity]; //创建新tableint index = (e.hash & 0x7FFFFFFF) % newCapacity; //重新散列rehash

7. 较之HashMap,【Hashtable是线程安全的】初始容量不像HashMap(初始容量必须为2的次方),最好【初始化一个合适大小的Hashtable】,防止扩容开销

转载地址:http://texlf.baihongyu.com/

你可能感兴趣的文章
【Loadrunner】性能测试报告实战
查看>>
【面试】一份自我介绍模板
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>