首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HashMap的默认容量为什么设置16?

但是需要length是2^n, 这样才满足: X % 2^n = X & (2^n – 1) 所以,HashMap的容量一定要是2^n。 那么为什么要是16呢?不是4,8 ,32呢?...MAXIMUM_CAPACITY : n + 1;//step2 上面的算法目的挺简单,就是:根据用户传入的容量值(代码中的cap),通过计算,得到第一个比他大的2的幂并返回。...loadFactor是装载因子,表示HashMap满的程度,默认值为0.75f,设置成0.75有一个好处,那就是0.75正好是3/4,capacity又是2的幂。 所以,两个数的乘积都是整数。...hash运算的过程其实就是对目标元素的Key进行hashcode,再对Map的容量进行取模,JDK 的工程师为了提升取模的效率,使用位运算代替了取模运算,这就要求Map的容量一定得是2的幂。...作为默认容量,太大和太小都不合适,所以16就作为一个比较合适的经验值被采用了。 为了保证任何情况下Map的容量都是2的幂,HashMap在两个地方都做了限制。

91710

为什么Java8中HashMap链表使用红黑树不是AVL树

在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。...那么很多人就有疑问为什么是使用红黑树不是AVL树,AVL树是完全平衡二叉树阿?...第一个问题为什么不一直使用树? 参考《为什么HashMap包含LinkedList不是AVL树?》 我想这是内存占用与存储桶内查找复杂性之间的权衡。...作为参考,这是一个HashMap的Java 8 impl(它实际上有一个很好的解释,整个事情如何工作,以及为什么他们选择8和6,作为“TREEIFY”和“UNTREEIFY”阈值) 第二个问题为什么hash...冲突使用红黑树不是AVL树呢 参考:AVL树和红黑树之间有什么区别?

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

为什么HashMap的键值可以为null,ConcurrentHashMap不行?

调用这个方法会抛出空指针异常 int index = (hash & 0x7FFFFFFF) % tab.length;//计算存储位置 //遍历,看是否键或值对是否已经存在,如果已经存在返回旧值...HashMap的键值与null 我们同样也通过HashMap的put方法去分析它的底层源码,先上代码。...0 : (h = key.hashCode()) ^ (h >>> 16); } 在计算hash值的时候,hashmap中通过三目运算符做了空值处理,直接返回0,这样最终计算出key应该存储在数组的第一位上...的键值对特点如同身份证与人名一样,key等同于身份证,全国唯一,value值等同于人名,可以重复,比如全国有上万个叫张伟的,所以value值也就同样允许存储多个null。...咱们通俗点讲就是一个结果,2种释义,就好比我们通过get方法获取值的时候,返回一个null,其实我们是无法判断是值本身为null还是说集合中就没这个值!

5600

为什么 useState 返回的是 array 不是 object?

,那么为什么返回数组不是返回对象呢?...为什么返回数组不是返回对象 弄懂这个问题先明白 ES6 的解构赋值,来看 2 个简单的例子: 数组的解构赋值 const foo = [1, 2, 3]; const [one, two, three...,那么使用者可以对数组中的元素命名,代码看起来也比较干净 如果 useState 返回的是对象,在解构对象的时候必须要和 useState 内部实现返回的对象同名,想要使用多次的话,必须得设置别名才能使用返回值...array 不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState 返回的是 array...不是 object?

2.2K20

分布式锁为什么选择Zookeeper不是Redis?

为什么选择Zookeeper?难道只是因为Zookeeper是目录结构,Redis是K-V结构吗?...简单的讲,当一个DML语句发送给主节点时,Zookeeper需要保证一半以上的节点接收到数据,才会返回成功。并且当主节点挂掉,从节点重新选举时,同步到最新的数据的节点会有优先选举权。...分布式锁 实现分布式锁,需要满足一些要求: 只能有一个服务的一个线程能获取锁 一个持有锁的线程挂掉后,锁应该被释放,用来给其他线程用 一个持有锁的线程没执行完,锁不能释放 锁释放后,其他等待者可以继续争抢...Redis如果解决分布式锁的问题,对于一些复杂的情况,很难解决,成本较高。

90230

为什么 HashMap 的容量大小设置为2的N次方?

我说小朋友:如果想指定 HashMap 对象的容量得用2的N次方 。假如不是2的N次方那么在第一次put 元素的时候也会自动把容量设置为比传入参数大的最小的2的N次方,并不是你指定的这个值。...HashMap 存储数据依赖的是数组和[链表|红黑树],具体链表和红黑树之间如何转换的细节此文不做详细介绍。本文开头提到的实例化容量大小指的则是数组的大小。 如何计算元素在数组中所对应的下标?...不过在在 HashMap 中可不是直接使用 % 运算符来操作的。...HashMap 并没有傻乎乎的直接使用用户指定的容量大小。而是在实例化 HashMap 对象时,如果初始容量大小不是2的N次方则会把 threshold 设置成比传入初始容量大的最小的2的N次方。...哦,前面说为什么计算出来的散列值需要再让高16位和低十六位做异或运算,主要是让参与与运算的位同时具有高位和低位的特征,来减少哈希碰撞次数。

1.4K00

八股文:为什么HashMap的键值可以为null,ConcurrentHashMap不行?

在Java中,ConcurrentHashMap这个线程安全的集合中的Key或者Value是不允许 null(空)值出现,但是非线程安全的HashMap又允许Key或者Value插入null(空)值。...探寻源码 ConcurrentHashMap的put方法对key和value做了非空判断,如果为空,会抛出空指针异常: 那为什么ConcurrentHashMap如此设计呢?...在单线程环境中,不会存在一个线程操作该 HashMap 时,其他的线程将该 HashMap 修改的情况,可以通过 contains(key)来做判断是否存在这个键值对,从而做相应的处理。...也就是说,当一个线程从ConcurrentHashMap获取某个key,如果返回的结果是null的时候。...这种不确定性会造成线程安全性问题,ConcurrentHashMap本身又是一个线程安全的集合。 所以才这么设计。

11210

为什么建议普通人要用AI学不是学AI

26 2023-06 为什么建议普通人要用AI学不是学AI 如题,顺便分享一些用AI来学习的案例供大家参考~ LEARN MORE 图片由Stable Diffusion绘制 你不需要什么都知道...包括我自己都下意识的认为我这样是错误的,我应该专一应该专注,不是对什么都有兴趣。直到后来因为过于广泛的兴趣接触到了多项潜能者这个概念,才开始对自己和解,不再陷入自我批评中。...我不知道芯片是怎么加工的,这丝毫不影响我使用电脑;我不知道小麦怎么种植,但是我并没有因此饿肚子;我不知道AI是什么原理,但这并不影响我用AI工具写文章。...为什么我能想到这一层?因为淘金热里最赚钱的人并不是淘金的人而是卖工具的人啊!...不过并不是很建议大家用这种办法,被人嚼剩下的饭哪有什么滋味,除非你有特殊需求。 比如你是一个记者,采访一位作家,但是你没有读过这位作家的作品,去采访总得需要提前做做功课吧。

22540

java – 为什么InputStream#read()返回一个int不是一个字节?

但是为何方法InputStream#read()需要返回int类型值呢?...首先,我们完成一个EOF(End of File)判断,在Java中就是以-1来表示数据读完了,但是如果返回的char类型值,那么根本没有-1这个数值;如果换种方式,返回一个特殊的char值,比如char...中的-1值,那么就占用了此字符,如果字节数据恰好对应-1值,那么就无法被正确读出,且会被错误认为i字节数据读好了,这就是返回int类型值的原因,当然,字节数据被转为int表示,需要高24位布零。...其次,既然只是如上的需求,那么为什么返回short值呢? 实际上在Java内存模型中,对于short以及int类型值,都是占据32位的内存空间的。...换言之,我们没有在这个应用中返回int/short类型的数据是没有区别的,所以我们不妨就使用代表其实际内存模型的int类型值。

1.2K20

Scala专题系列(一):Scala基础

Scala并不区分基本类型和引用类型,对于它来讲所以得类型都是一个类 在Scala中,我们用方法不是强制类型转换来做数值类型之间的转换 4:方法声明 Scala 中声明方法的结构如下: def hello...} 方法的返回值 前面我们定义了一个Uint的函数,如果我们定义一个有返回类型的函数的话,就直接将Uint改为对应的返回类型即可。...在Scala中,方法返回值最终是不需要return来修饰的,Scala会自动的推导出返回值 5:类型推断 先来看一段Java代码 HashMap intToStringMap...Scala 使用类型注解一词表示类似 HashMap 的显式类型声明。...,以上声明可以用 Scala 重写如下: val intToStringMap: HashMap[Integer, String] = new HashMap 如果我们也可以将 HashMap[Integer

70840

【29期】Java集合框架 10 连问,你有被问过吗?

HashMap 不是线程安全的 HashMap 是 map 接口的实现类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。...HashTable 的方法是 Synchronize 的, HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的方法实现同步, HashMap 就必须为之提供外同步。...所以,性能考虑,HashMap中的链表出现越少,性能才会越好。 3.为什么HashMap是线程不安全的 见20期:【20期】你知道为什么HashMap是线程不安全的吗?...:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。...Map主要有以下实现类: HashMapHashMap基于散列表实现,其插入和查询的开销是固定的,可以通过构造器设置容量和负载因子来调整容器的性能。

57630

大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

编写一个方法 list,返回当前系统有哪些客户   2. 客户放在哪?...编写一个方法 findIndexById(因为我们的 ArrayBuffer 索引和 id 并不是对应的)   3....如果发现有,则删除,如果没有就返回 false 1、在 CustomerService.scala 中编写一个方法 del,接收一个 id,先去调用另一个方法 findIndexById,判断   //...mark 为 Sources Root 7) 当修改后,第一次速度比较慢,因为 maven 需要 resolve 包的依赖,下载相关的包。...workers.size + " 个Worker存活")     } 16.9.7 实现功能 4-Master,Worker 的启动参数运行时指定 功能要求:Master,Worker 的启动参数运行时指定,不是固定写在程序中的

1.9K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券