问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linkedhashset,hashtable底层是由什么实现的,hashtable是不是同步的

发布网友 发布时间:2022-03-29 14:53

我来回答

2个回答

懂视网 时间:2022-03-29 19:14

hashtable底层结构是数组加链表加红黑树(JDK1.8增加了红黑树部分)。

  

  hashtable类实现一个哈希表,该哈希表将键映射到相应的值。任何非null对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。Hashtable的实例有两个参数影响其性能:初始容量和加载因子。Hashtable的实例有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量就是哈希表创建时的容量。注意,哈希表的状态为open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。加载因子是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。关于何时以及是否调用rehash方法的具体细节则依赖于该实现。

热心网友 时间:2022-03-29 16:22

hastTable和hashMap的区别:

(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

(2)这个不同即是最重要的一点:Hashtable中的方法是同步的,而HashMap方法(在缺省情况下)是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:

Map Collections.synchronizedMap(Map m)

这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

(3)只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。

其它的一些资料:

HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。(最主要的区别)

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以,只容许有一个null值的key,可以有多个null值的value)。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它们的实现也有很大的不同。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:

int hash = key.hashCode();

int index = (hash  0x7FFFFFFF) % tab.length;

而HashMap重新计算hash值,而且用与代替求模:

int hash = hash(k);

int i = indexFor(hash, table.length);

static int hash(Object x) {

int h = x.hashCode();

h += ~(h << 9);

h ^= (h >>> 14);

h += (h << 4);

h ^= (h >>> 10);

return h;

}

static int indexFor(int h, int length) {

return h  (length-1);

}

以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如

HashMap对null的操作。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 微信支付功能可以用到什么时候 微信支付怎么用?微信支付可以完成哪些支付 微信支付可以吗? 微信支付能开电子发票吗? 微信被限制了,我想用微信支付可以吗? 微信支付可以代付吗 微信支付未成年可以支付吗 微信一天可以支付多少次? HashTable的底层是用什么实现的 0.15时等于几分 95%化成小数、成数、分数是多少 0.6小时等于几分 0.3时是多少分呢 arcos0.95等于多少度多少分多少秒 急!在线等待 95分等于多少时要分数好评 0.8时等于多少分 8.95时等于多少时多少分 0.4时等于多少分 0.7时等于多少分钟? 0.5时等于多少时多少分数学题求助:0.5时= HashTable有什么用? 小米麦克风声音小怎么办 HashTable底层如何实现线程安全的 小米通话声音小怎么设置 小米11通话音量怎么调大 小米手机听筒声音小 小米手机通话音量怎么调高? 小米11手机怎么调接听电话音量 周公解梦梦见1条石头雕刻的龙 梦见石头雕像做的狐狸 是个机关 左右两边各一个 想... 梦见坟头,旷野上都摆放着石头雕刻的乌龟狮子老虎 梦见石头雕像里面爬出来好多虫子,我跑它们也跑后来... 谁知道驻马店市的教师编制考试的时间和内容?? 河南驻马店市报考教师招聘考试怎么报名 写给快上一年级儿子的一封信 写给一年级小朋友的信一封信 写给一年级小朋友的一封信 hashtable为什么不能允许有null 键和值而 hashmap 为什么又允许有? 鼋,黧,镊,靊,念什么 镊子的镊换成提手旁念什么字