相关疑难解决方法(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万
查看次数

IntelliJIdea:HashMap 调试窗口未显示与链表相关的完整详细信息

我的简单 java 代码如下所示:

String s1 = "FB";

String s2 = "Ea";

System.out.println(s1.hashCode() == s2.hashCode()); // true

Map<String, Integer> map = new HashMap<>();

map.put(s1, 1);

map.put(s2, 2);
Run Code Online (Sandbox Code Playgroud)

虽然调试这段代码在IntelliJIdea,我不能看到HashMap的数据结构中创建的链接列表,另外,还创建了两个桶,而不是一个虽然哈希码是相同的s1s2。能否请您澄清一下?

java intellij-idea

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

HashMap什么时候会使用TreeSet作为桶呢?

HashMap文档中我们可以读到:

请注意,使用具有相同 hashCode() 的多个键肯定会降低任何哈希表的性能。为了减轻影响,当键是 Comparable 时,此类可以使用键之间的比较顺序来帮助打破平局。

我知道如果密钥实现Comparable接口,在许多哈希冲突时,桶可以从 转变ListTreeSet

是否可以设置容量,或检查何时转换?

java java-8

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

标签 统计

java ×3

java-8 ×2

dictionary ×1

hashmap ×1

intellij-idea ×1