Java 如何创建以二进制形式保存528位记录的hashmap
我需要创建一个哈希映射,它将保存528位二进制数据。二进制数据如何存储在hashmap中 示例:000000000 100000000。。。这是25位。类似地,我需要存储528位 我是否需要将该值转换为某个字节数组,或者直接将数据存储在内存中 举个例子会很有帮助 我需要把这个值转换成字节数组吗 字节数组是一种选择。其他包括short、int或long数组,或Java 如何创建以二进制形式保存528位记录的hashmap,java,hashmap,bitset,Java,Hashmap,Bitset,我需要创建一个哈希映射,它将保存528位二进制数据。二进制数据如何存储在hashmap中 示例:000000000 100000000。。。这是25位。类似地,我需要存储528位 我是否需要将该值转换为某个字节数组,或者直接将数据存储在内存中 举个例子会很有帮助 我需要把这个值转换成字节数组吗 字节数组是一种选择。其他包括short、int或long数组,或位集类的(可能)实例数组。哪一个最好取决于“记录”对象是如何创建的以及应用程序是如何处理它们的 一旦确定了表示类型,创建一个以记录为值的哈希
位集
类的(可能)实例数组。哪一个最好取决于“记录”对象是如何创建的以及应用程序是如何处理它们的
一旦确定了表示类型,创建一个以记录为值的哈希表就很简单了;e、 g
HashMap<SomeKey, Record> map = new HashMap<SomeKey, Record>();
map.put(someKey, record);
...
HashMap map=newhashmap();
放置(某个键、记录);
...
或者直接将数据存储在内存中
在Java中不能这样做
我需要把这个值转换成字节数组吗
字节数组是一种选择。其他包括short、int或long数组,或位集
类的(可能)实例数组。哪一个最好取决于“记录”对象是如何创建的以及应用程序是如何处理它们的
一旦确定了表示类型,创建一个以记录为值的哈希表就很简单了;e、 g
HashMap<SomeKey, Record> map = new HashMap<SomeKey, Record>();
map.put(someKey, record);
...
HashMap map=newhashmap();
放置(某个键、记录);
...
或者直接将数据存储在内存中
你不能在Java中这样做。不要让你的生活复杂化 假设
值
为字符串
类型,则如果:
将键
存储为字符串
可能是最容易和最可读的
String value = "some data", key = "0101101010101010101011010110101010010101";
HashMap<String, String> map = new java.util.HashMap<String, String>();
map.put(key, value);
元素键
将有一个值:10110101010101010110110110101010010101
将键存储为字节[]
就我个人而言,我希望避免这种情况。在本例中,简单的默认散列函数将数组的引用散列为键,但我们需要深度散列(所有元素必须相等)。以下操作将无法按所述方式工作:
HashMap<byte[], String> map = new HashMap<byte[], String>();
map.put(new BigInteger(key1, 2).toByteArray(), value);
您可以创建一个临时的位集
类转换器,如:
public static int keySize = 41;
public static BitSet getBitSet(String key) {
char[] cs = new StringBuilder(key).reverse().toString().toCharArray();
BitSet result = new BitSet(keySize);
int m = Math.min(keySize, cs.length);
for (int i = 0; i < m; i++)
if (cs[i] == '1') result.set(i);
return result;
}
public static String getBitSet(BitSet key) {
StringBuilder sb = new StringBuilder();
int m = Math.min(keySize, key.size());
for (int i = 0; i < m; i++)
sb.append(key.get(i) ? '1' : '0');
return sb.reverse().toString();
}
publicstaticintkeysize=41;
公共静态位集getBitSet(字符串键){
char[]cs=新的StringBuilder(键).reverse().toString().ToCharray();
位集结果=新位集(键大小);
int m=数学最小值(键大小,cs.长度);
for(int i=0;i
不要让你的生活复杂化
假设值
为字符串
类型,则如果:
将键
存储为字符串
可能是最容易和最可读的
String value = "some data", key = "0101101010101010101011010110101010010101";
HashMap<String, String> map = new java.util.HashMap<String, String>();
map.put(key, value);
元素键
将有一个值:10110101010101010110110110101010010101
将键存储为字节[]
就我个人而言,我希望避免这种情况。在本例中,简单的默认散列函数将数组的引用散列为键,但我们需要深度散列(所有元素必须相等)。以下操作将无法按所述方式工作:
HashMap<byte[], String> map = new HashMap<byte[], String>();
map.put(new BigInteger(key1, 2).toByteArray(), value);
您可以创建一个临时的位集
类转换器,如:
public static int keySize = 41;
public static BitSet getBitSet(String key) {
char[] cs = new StringBuilder(key).reverse().toString().toCharArray();
BitSet result = new BitSet(keySize);
int m = Math.min(keySize, cs.length);
for (int i = 0; i < m; i++)
if (cs[i] == '1') result.set(i);
return result;
}
public static String getBitSet(BitSet key) {
StringBuilder sb = new StringBuilder();
int m = Math.min(keySize, key.size());
for (int i = 0; i < m; i++)
sb.append(key.get(i) ? '1' : '0');
return sb.reverse().toString();
}
publicstaticintkeysize=41;
公共静态位集getBitSet(字符串键){
char[]cs=新的StringBuilder(键).reverse().toString().ToCharray();
位集结果=新位集(键大小);
int m=数学最小值(键大小,cs.长度);
for(int i=0;i
是否希望Hashmap的值为528位块?是的。我可以这样做,还是需要在存储之前将其转换为字节数组?Bitset类会有帮助吗?您希望Hashmap的值是这样的528位块吗?是的。我可以这样做,还是需要在存储之前将其转换为字节数组?Bitset类会有帮助吗?如何使用字节数组?我想用位集类来实现它。@JavaBits:您可以简单地使用HashMap
作为您的类型,并将这些位集存储到您的映射中。我真的看不出你的问题。@JavaBits-我也看不出你的问题。如何使用字节数组来解决这个问题?我想用位集类来实现它。@JavaBits:您可以简单地使用HashMap
作为您的类型,并将这些位集存储到您的映射中。我真的看不出你的问题。@JavaBits-我也看不出你的问题。