了解 JVM 行为:`switch` 如何处理字符串哈希冲突?

问题描述 投票:0回答:1

在一次采访中,有人向我提出了一个有趣的问题,即 Java 虚拟机 (JVM) 如何处理涉及

switch
类型的
String
语句。具体来说,我被问到 JVM 是否使用
LookupSwitch
TableSwitch
来执行此操作。我最初的想法是,由于
LookupSwitch
哈希码的稀疏性,它将利用
String
。然而,面试官又增加了一层复杂性,他问:“当两个不同的情况具有相同的哈希码时,JVM 如何处理哈希冲突?”

class Solution {
    static int switchString(String i) {
        int res;
        switch (i) {
            case "A":  // hashcode 65
                res = 0;
                break;
            case "FB":  // hashcode 2236
                res = 1;
                break;
            case "Ea":  // hashcode 2236
                res = 2;
                break;
            default:
                res = 3;
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(switchString("Ea"));
    }
}

您能否帮助阐明 JVM 如何在涉及

String
对象的 switch case 中导航,特别是在涉及哈希冲突时?

对于第一部分问题,我发现我错了这里。编译器必须选择 lookupswitchtableswitch 指令

java jvm hashcode
1个回答
0
投票

我不会声称自己是专家,但我同意您对

LookupSwitch
的评估 - 关于哈希冲突,我想这可以通过
equals()
方法解决。

© www.soinside.com 2019 - 2024. All rights reserved.