Java 将长值数组编码为位集

Java 将长值数组编码为位集,java,bit-manipulation,bitmask,Java,Bit Manipulation,Bitmask,我看到我们可以将整数数组编码到一个位集中,并检索它们,如中所示: int[] ints = new int[]{5, 7, 25, 100102244}; BitSet b = new BitSet(); for (int i=0;i<ints.length;i++) b.set(ints[i]); b.stream().forEach(i -> System.out.println(i)); 是否可以对一组long执行相同的操作 提前感谢,使用: import java

我看到我们可以将整数数组编码到一个位集中,并检索它们,如中所示:

int[] ints = new int[]{5, 7, 25, 100102244};

BitSet b = new BitSet();
for (int i=0;i<ints.length;i++)
    b.set(ints[i]);
b.stream().forEach(i -> System.out.println(i));
是否可以对一组long执行相同的操作

提前感谢,

使用:

import java.nio.*;
导入java.util.*;
var buffer=LongBuffer.wrap(新的long[]{5,7,25100102244});
var bitset=bitset.valueOf(缓冲区);
系统输出打印项次(位集);
for(长l:bitset.toLongArray()){
系统输出打印LN(l);
}

为什么要以这种方式使用
位集
?如果您的数字很大,
位集将变得不必要的大。为什么要这样做?嗨,数组中的长是随机访问文件中的位置,数组长度可能会改变,所以我正在寻找一种方法将它们存储在一个8字节的值中。您当前的代码肯定不会将它们存储在8字节中。为什么需要8个字节?我不太理解您的解释。如果且仅当每个long的值在0到Integer.MAX_值之间,您可以使用long数组(或其他集合)。(并且有足够的内存可用于最大值;例如,如果最大值为20亿,则JVM.Neardupe中需要数百兆字节)
5
7
25
100102244
{0, 2, 64, 65, 66, 128, 131, 132, 194, 197, 198, 204, 205, 206, 208, 209, 210, 212, 213, 214, 215, 216, 218}
5
7
25
100102244