Я пытался реализовать BloomFilter и наткнулся на некоторые дискуссии о BitSets. Lucene OpenBitSet утверждает, что он быстрее, чем реализация Java BitSet почти во всех операциях.
Я попытался посмотреть код для обеих реализаций.
Код Java BitSet
Мне кажется, что оба эти класса используют массив 'long' для хранения бит. Отдельные биты сопоставляются с определенным индексом массива и положением бит в значении 'long', хранящемся в индексе.
В чем причина того, что реализация OpenBitSet намного лучше с точки зрения производительности? Где разница в коде, которая приводит к этому улучшению скорости?