如何在Java中保存大量的5位数?

时间:2016-09-11 23:12:19

标签: java arrays

如何在内存中有效保存和访问大量5位数字?

例如 01100 01101 01110 01111 10000 10001

我稍后会转换为一个字节来检查它是什么号码?

我在考虑使用一个字节数组,但过了一段时间,这将浪费大量内存,因为这将是一个不断增长的数组。另外,我想要有效地保存这个数组。我只会使用5位。

2 个答案:

答案 0 :(得分:0)

这是我在C中用于位数组实现的代码,在JAVA中它将是相同的,我必须重新考虑我对列表所说的内容,也许数组会更好。

无论如何,您将数组视为连续的位段。这些函数设置,获取和读取数组的第k位。在这种情况下,我使用的是整数数组,所以你看到'32',你是使用一个字节数组,然后你使用'8'。

void set_bit(int a[], int k)
{
    int i = k / 32;
    int pos = k % 32;
    unsigned int flag = 1;  // flag = 0000....00001
    flag = flag << pos;     // flag = 0000...00100..0000
    a[i] = a[i] | flag;     // set the bit at the k-th position in a[i]
}

void clear_bit(int a[], int k)
{
    int i = k / 32;
    int pos = k % 32;
    unsigned int flag = 1;  // flag = 0000....00001
    flag = flag << pos;     // flag = 0000...00100..0000
    flag = ~flag;

    a[i] = a[i] & flag;     // set the bit at the k-th position in a[i]
}

int test_bit(int a[], int k)
{
    int i = k / 32;
    int pos = k % 32;
    unsigned int flag = 1;  // flag = 0000....00001
    flag = flag << pos;     // flag = 0000...00100..0000

    if (a[i] & flag)        // test the k-th bit of a to be 1
        return 1;
    else
        return 0;
}

我不知道你如何存储五位数,你必须逐位插入它们,并且还要跟踪位数组中的最后一个空位。

答案 1 :(得分:0)

  

“我正在考虑使用一个字节数组,但过了一段时间,这会浪费大量内存,因为这将是一个不断增长的数组。”

我遇到了类似的问题,决定写一个基于BitInputStreamBitOutputSteam的文件。因此,内存耗尽不再是问题。请注意,给定的链接不是我的工作,而是如何编写位输入/输出流的好例子。