相关疑难解决方法(0)

HashMap Java 8实现

根据以下链接文档:Java HashMap Implementation

我对HashMap(或者更确切地说是增强HashMap)的实现感到困惑.我的疑问是:

首先

static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Run Code Online (Sandbox Code Playgroud)

为什么以及如何使用这些常量?我想要一些明确的例子. 他们如何通过这个获得性能提升?

其次

如果您HashMap在JDK中看到源代码,您将找到以下静态内部类:

static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
    HashMap.TreeNode<K, V> parent;
    HashMap.TreeNode<K, V> left;
    HashMap.TreeNode<K, V> right;
    HashMap.TreeNode<K, V> prev;
    boolean red;

    TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
        super(arg0, arg1, arg2, arg3);
    }

    final HashMap.TreeNode<K, V> root() {
        HashMap.TreeNode arg0 …
Run Code Online (Sandbox Code Playgroud)

java dictionary hashmap java-8

83
推荐指数
3
解决办法
2万
查看次数

HashMap重新散列/调整容量

A HashMap有一个来自它的文档的短语:

如果初始容量大于最大条目数除以加载因子,则不会发生重新加载操作.

注意文档怎么说的老调重弹,没有调整 -即使翻版只会当调整大小会发生; 那就是当桶的内部大小增加两倍时.

当然HashMap,我们可以提供这样一个构造函数来定义这个初始容量.

使用指定的初始容量和默认加载因子(0.75)构造一个空的HashMap.

好的,似乎很容易:

// these are NOT chosen randomly...    
List<String> list = List.of("DFHXR", "YSXFJ", "TUDDY", 
          "AXVUH", "RUTWZ", "DEDUC", "WFCVW", "ZETCU", "GCVUR");

int maxNumberOfEntries = list.size(); // 9
double loadFactor = 0.75;

int capacity = (int) (maxNumberOfEntries / loadFactor + 1); // 13
Run Code Online (Sandbox Code Playgroud)

所以容量是13(内部是16- 下一个2的幂),这样我们保证文档部分不重复.好吧,让我们测试一下,但首先介绍一个方法,进入HashMap并查看值:

private static <K, V> void debugResize(Map<K, V> map, K key, V value) throws Throwable …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-8

23
推荐指数
1
解决办法
610
查看次数

何时以及如何将HashMap从链表转换为红黑树?

我正在浏览java 8的功能,发现当桶上的条目集数量增加时,哈希映射使用红黑树而不是链表.

但是,这不需要密钥是可比较的还是存在密钥的某些顺序,这是如何工作的?这种转换何时实际发生?如何?

java hashmap java-8

6
推荐指数
1
解决办法
2379
查看次数

标签 统计

hashmap ×3

java ×3

java-8 ×3

dictionary ×1