Java HashMap 键没有输出正确的值
Java HashMap keys are not outputting their correct values
所以我正在尝试构建一个仅使用哈希图进行十六进制到二进制转换的基本程序。
无论出于何种原因,“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'));
我正在制定解决方案,但我真的很好奇为什么会这样。
A - 原因
因为在下一行中,您使用八进制表示,因为您从 0 开始。在 base-8 八进制表示中,0101
代表 65,因为您将字符 5 映射到那个value,八进制的整数值 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
所以我正在尝试构建一个仅使用哈希图进行十六进制到二进制转换的基本程序。 无论出于何种原因,“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'));
我正在制定解决方案,但我真的很好奇为什么会这样。
A - 原因
因为在下一行中,您使用八进制表示,因为您从 0 开始。在 base-8 八进制表示中,0101
代表 65,因为您将字符 5 映射到那个value,八进制的整数值 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