Java位图排序与归并排序
前言
在《编程珠玑》一书的“第1章 开篇”中描述了如何使用位图(bit map)的数据结构来在有限内存空间时进行排序,即位图排序。
本文描述了在Java8中如何进行位图排序,并比较了位图排序和归并排序的效率。
位图数据结构
可使用一个20位(bit)长的字符串来表示一个所有元素都小于20的简单的非负数整数集合。
例如,可以用如下字符串来表示集合 {1, 2, 3, 5, 8, 13}:
0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0
Java中使用BitSet来表示位图(bit map)数据结构:
@Test
public void test_bit_set() {
BitSet bitSet = new BitSet(20);
bitSet.set(1);
bitSet.set(2);
bitSet.set(3);
bitSet.set(5);
bitSet.set(8);
bitSet.set(13);
System.out.println(bitSet.toString());
System.out.println(convertBitSetToBinaryString(bitSet, 20));
}
private static String convertBitSetToBinaryString(BitSet bitSet, int numOfBits) {
return IntStream.range(0