Java HashMap键未输出正确的值

时间:2018-03-30 23:23:30

标签: java hashmap binary numbers octal

所以我正在尝试使用hashmap构建一个十六进制到二进制转换的基本程序。 无论出于何种原因,低于'8'的每个键都输出一个不是二进制的值。例如:5应输出0101,而输出65。 下面基本上是哈希。

    map.put('1', 0001);
    map.put('2', 0010);
    map.put('3', 0011);
    map.put('4', 0100);
    map.put('5', 0101);
    map.put('6', 0110);
    map.put('7', 0111);
    map.put('8', 1000);
    map.put('9', 1001);
    map.put('A', 1010);
    map.put('B', 1011);
    map.put('C', 1100);
    map.put('D', 1101);
    map.put('E', 1110);
    map.put('F', 1111);

    System.out.println(map.get('5'));

我正在制作一个工作,但我真的很好奇为什么会这样。

1 个答案:

答案 0 :(得分:0)

A - 原因

因为在以下行中,您使用的是Octal表示,因为您从0开始。在base-8 Octal represantation中,0101代表65,因为您将Character 5映射到该值,八进制0101的整数值计算如下;

1 * 8 ^ 2 + 0 * 8 ^ 1 * + 1 * 8 ^ 0 = 64 + 0 = 1 = 65

您需要以整数格式映射值,不需要使用八进制或二进制。值不会改变,但表示会发生变化。

B - 失败的演示代码

package com.levo.so.maprelated;

import java.util.HashMap;
import java.util.Map;

public class HexMapFailDemo {

    public static void main(String[] args) {
        Map<Character, Integer> map = new HashMap<>();

        map.put('1', 0001);
        map.put('2', 0010);
        map.put('3', 0011);
        map.put('4', 0100);
        map.put('5', 0101);
        map.put('6', 0110);
        map.put('7', 0111);
        map.put('8', 1000);
        map.put('9', 1001);
        map.put('A', 1010);
        map.put('B', 1011);
        map.put('C', 1100);
        map.put('D', 1101);
        map.put('E', 1110);
        map.put('F', 1111);

        System.out.println(map.get('5'));
        System.out.println("Octal 101 = 8^2 + 1 = " + (8*8 + 1));
    }

}

C - 输出

65
Octal 101 = 8^2 + 1 = 65

D - 成功的演示代码

package com.levo.so.maprelated;

import java.util.HashMap;
import java.util.Map;

public class HexMapSuccessDemo {

    public static void main(String[] args) {
        Map<Character, Integer> map = new HashMap<>();

        map.put('1', 1);
        map.put('2', 2);
        map.put('3', 3);
        map.put('4', 4);
        map.put('5', 5);
        map.put('6', 6);
        map.put('7', 7);
        map.put('8', 8);
        map.put('9', 9);
        map.put('A', 10);
        map.put('B', 11);
        map.put('C', 12);
        map.put('D', 13);
        map.put('E', 14);
        map.put('F', 15);

        System.out.println(map.get('5'));
    }

}

E - 输出

5