Java 如何创建以二进制形式保存528位记录的hashmap

Java 如何创建以二进制形式保存528位记录的hashmap,java,hashmap,bitset,Java,Hashmap,Bitset,我需要创建一个哈希映射,它将保存528位二进制数据。二进制数据如何存储在hashmap中 示例:000000000 100000000。。。这是25位。类似地,我需要存储528位 我是否需要将该值转换为某个字节数组,或者直接将数据存储在内存中 举个例子会很有帮助 我需要把这个值转换成字节数组吗 字节数组是一种选择。其他包括short、int或long数组,或位集类的(可能)实例数组。哪一个最好取决于“记录”对象是如何创建的以及应用程序是如何处理它们的 一旦确定了表示类型,创建一个以记录为值的哈希

我需要创建一个哈希映射,它将保存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-我也看不出你的问题。