头部左侧文字
头部右侧文字
当前位置:网站首页 > 资讯 > 正文

hashmap初始化,hashmap初始化数组长度

作者:admin日期:2024-02-15 06:30:18浏览:58分类:资讯

hashmap的扩容机制

HashMap:底层数组+链表实现,可以存储null键和null值,线程不安全。初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂。扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入。

扩容时map并不会立即把新数据做迁移,而是当访问原来旧bucket的数据的时候,才把旧数据做迁移,如下图:注意:这里并不会直接删除旧的bucket,而是把原来的引用去掉,利用GC清除内存。

由此可见并不是链表长度超过8就一定会转换成红黑树,而是先尝试扩容 基本思想是当红黑树中的元素减少并小于一定数量时,会切换回链表。

在程序设计时,一般遇到扩缩容或者碎片整理问题时,复制算法都是非常有效的。比如:HashMap的扩容使用的是同样的思路,Redis的rehash也是如此。

hashMap 扩容机制就是重新计算容量,向 hashMap 不停地添加元素,当 hashMap 无法装载新的元素,对象将需要扩大数组容量,以便装入更多的元素。HashMap 的扩展原理是 HashMap 用一个新的数组替换原来的数组。

HashMap是什么东西

1、Java中的HashMap可以看作是一个盒子,这个盒子里面存放着很多抽屉。每个抽屉都有一个标签,用来表示抽屉里的物品。当我们要把一些物品放入盒子中时,我们首先根据物品的特征确定一个标签,然后把物品放入对应的抽屉里。

2、HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。

3、hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

4、Redis 和 Java 中的 HashMap 是两个不同的东西,不能直接进行比较。Redis 是一款基于内存的键值存储系统,支持多种数据结构,包括字符串、列表、哈希表、集合和有序集合等。

hashmap和hashtable哪个是线程安全的

HashMap和Hashtable的区别:HashMap:非线程安全;初始化容量16,扩容2倍;key和value可以为null。Hashtable:线程安全;初始化容量11,扩容2倍+1 key和value都不能是null。

线程安全性:HashMap是线程不安全的,HashTable是线程安全的。键和值得区别:HashMap的键允许null值,HashTable不允许。方法的区别:HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。

两者最主要的区别在于hashtable是线程安全,而hashmap则非线程安全。

不具备线程安全。HashMap和集合库中其他接口配合的更紧密,所以也被更广泛地使用。功能上差不多,单线程下很大程度上可以互相替换使用。Hashtable不接受null做为键或值。

HashTable是同步(方法中使用了Synchronize)的;而HashMap是未同步(方法中缺省Synchronize)的。

HashMap的初始容量和加载因子

1、初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。

2、默认容量大小是16,加载因子是0.75。最多只允许一条key为Null,允许多条value为Null。HashMap实现了Cloneable和Serializable接口,而WeakHashMap没有。1).HashMap实现Cloneable,说明它能通过clone()克隆自己。

3、HashSet()构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。HashSet(Collection? extends E c)构造一个包含指定 collection 中的元素的新 set。

暂无评论,来添加一个吧。

取消回复欢迎 发表评论: