开发者社区> 问答> 正文

JAVA中扩容条件指的是什么呢?

JAVA中扩容条件指的是什么呢?

展开
收起
vncamyi27xznk 2021-11-13 23:55:05 433 0
1 条回答
写回答
取消 提交回答
  • "HashMap 的扩容条件就是当 HashMap 中的元素个数(size)超过临界值( threshold)时就会自动扩容。 在 HashMap 中,threshold = loadFactor * capacity。 loadFactor 是装载因子,表示 HashMap 满的程度,默认值为 0.75f,设置成 0.75 有一个好处,那就是 0.75 正好是 3/4,而 capacity 又是 2 的幂。所以,两个数的乘积都是整数。 对于一个默认的 HashMap 来说,默认情况下,当其 size 大于 12(16*0.75)时就会触发扩容。 验证代码如下: console.log(1)``console.log (Map<String, String> map = new HashMap<>(); map.put(""hollis1"", ""hollischuang""); map.put(""hollis2"", ""hollischuang""); map.put(""hollis3"", ""hollischuang""); map.put(""hollis4"", ""hollischuang""); map.put(""hollis5"", ""hollischuang""); map.put(""hollis6"", ""hollischuang""); map.put(""hollis7"", ""hollischuang""); map.put(""hollis8"", ""hollischuang""); map.put(""hollis9"", ""hollischuang""); map.put(""hollis10"", ""hollischuang""); map.put(""hollis11"", ""hollischuang""); map.put(""hollis12"", ""hollischuang""); Class<?> mapType = map.getClass(); Method capacity = mapType.getDeclaredMethod(""capacity""); capacity.setAccessible(true); System.out.println(""capacity : "" + capacity.invoke(map)); Field size = mapType.getDeclaredField(""size""); size.setAccessible(true); System.out.println(""size : "" + size.get(map)); Field threshold = mapType.getDeclaredField(""threshold""); threshold.setAccessible(true); System.out.println(""threshold : "" + threshold.get(map)); Field loadFactor = mapType.getDeclaredField(""loadFactor""); loadFactor.setAccessible(true); System.out.println(""loadFactor : "" + loadFactor.get(map)); map.put(""hollis13"", ""hollischuang""); Method capacity = mapType.getDeclaredMethod(""capacity""); capacity.setAccessible(true); System.out.println(""capacity : "" + capacity.invoke(map)); Field size = mapType.getDeclaredField(""size""); size.setAccessible(true); System.out.println(""size : "" + size.get(map)); Field threshold = mapType.getDeclaredField(""threshold""); threshold.setAccessible(true); System.out.println(""threshold : "" + threshold.get(map)); Field loadFactor = mapType.getDeclaredField(""loadFactor""); loadFactor.setAccessible(true); System.out.println(""loadFactor : "" + loadFactor.get(map));)

    输出结果: capacity : 16 size : 12 threshold : 12 loadFactor : 0.75 capacity : 32 size : 13 threshold : 24 loadFactor : 0.75 当 HashMap 中的元素个数达到 13 的时候,capacity 就从 16 扩容到 32 了。 HashMap 中还提供了一个支持传入 initialCapacity,loadFactor 两个参数的方法,来初始化容量和装载因子。不过,一般不建议修改 loadFactor 的值。

    资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923"

    2021-11-15 23:43:46
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载