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。
猜你还喜欢
- 04-18 python字符数组转字符串,python 字符串数组转为整数数组
- 04-14 指针数组和数组指针区别,指针数组和数组指针的表示
- 04-09 java数组切片,java数组截取到新数组
- 04-08 原生js数组去重方法,js数组去重最优解法
- 04-08 数组转字符串方法js,在javascript中如何将数组转换为字符串?
- 04-08 二维数组怎么输出,二维数组怎么输出一行数据
- 04-06 数组词学组词,数组词学组词是什么
- 04-02 java数组语法,java数组用法
- 04-01 matlab一维数组,matlab一维数组拼接
- 03-24 数组去重排序c语言,编写数组去重
- 03-21 定义数组c语言,定义数组c语言是什么
- 03-13 数组去重的常见方法,数组去重o1
取消回复欢迎 你 发表评论:
- 最近发表
- 标签列表
- 友情链接
暂无评论,来添加一个吧。