java Hashtable底层原理是怎样的?数据结构包括什么?

BSO 2020-11-27 14:07:58 java常见问答 3192

大家都知道,随着近些年科学技术水平的不断进步与发展,学习编程语言的人也越来越多了。很多人对于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工具网。

推荐阅读:

hashmap和hashtable区别是什么?有什么区别?

java中session的工作原理是什么?和Cookies有何区别?

java中arp协议的工作原理是什么?RARP的是什么?