大家都知道,随着近些年科学技术水平的不断进步与发展,学习编程语言的人也越来越多了。很多人对于java中的一些常见知识点有些不了解,今天就来为大家详细介绍一下。
首先说一下具体的概念:
HashTable类继承自Dictionary类, 实现了Map接口。 大部分的操作都是通过synchronized锁保护的,是线程安全的,key、value都不可以为null, 每次put方法不允许null值,如果发现是null,则直接抛出异常。
另外,官方文档也说了:如果在非线程安全的情况下使用,建议使用HashMap替换,如果在线程安全的情况下使用,建议使用ConcurrentHashMap替换。
然后介绍一下它的数据结构:
主要是数组+链表。
那么,存取实现怎么做呢?主要如下:
put():
限制了value不能为null。
由于直接使用key.hashcode(),而没有向hashmap一样先判断key是否为null,所以key为null时,调用key.hashcode()会出错,所以hashtable中key也不能为null。
Hashtable是在链表的头部添加元素的。
int index=(hash & 0x7FFFFFFF)%tab.length;获取index的方式与HashMap不同
最后就是关于它的扩容机制:
Hashtable默认capacity是11,默认负载因子是0.75.。当前表中的Entry数量,如果超过了阈值,就会扩容,即调用rehash方法,重新计算每个键值对的hashCode;
判断新的容量是否超过了上限,没超过就新建一个新数组,大小为原数组的2倍+1,将旧数的键值对重新hash添加到新数组中。
以上就是关于java Hashtable底层原理的具体知识了,为大家详细的进行了说明。具体的内容还是很好理解的。如果你对java知识感兴趣,想要了解更多java基础知识以及常见问题,敬请关注奇Q工具网。
推荐阅读: