Я получил массивный массив битов, сохраненный как массив байтов, который представляет все значения int со знаком (4 294 967 295).
byte[] bitArray = byte[536870912];
Каждый байт в массиве представляет 8 чисел, по одному на каждый бит. Это означает, что byte[0] хранит 1, 2, 3, 4, 5, 6, 7, 8, а byte[1] хранит 9, 10, 11, 12, 13, 14, 15, 16 и т. д.
Я использую это для хранения огромной таблицы, где я могу установить числа либо в true, либо в false (0 или 1). У меня есть несколько довольно эффективных методов, чтобы проверить, установлен ли бит, и установить бит (только с использованием побитовых операторов).
Теперь мне нужно повторять эту таблицу снова и снова, чтобы найти биты, для которых установлено значение 0. Конечно, было бы довольно эффективно хранить только те числа, которые я хочу перебирать, поэтому мне не нужно проверять их все каждый раз. , но чисел так много, что для их хранения в ArrayList требуется много памяти.
Как я могу эффективно перебирать не заданные значения в битовом массиве несколько раз?
Set<Integer>
для хранения истинных чисел, а не использоватьbyte[536870912]
. - person Paul Boddington   schedule 27.02.2015