2013-04-16 2 views
0

Есть ли что-то быстрее времени, чем это:Что было бы самым быстрым способом пересечения двух битов в новый BitSet в Java?

// say we alread have BitSet bs1 and bs2 
BitSet bs3 = (BitSet) bs1.clone(); 
bs3.and(bs2); 

Может преобразовать Интс и добавить как числа, а затем преобразовать обратно в BitSet?

+2

Что случилось с тем, что у вас есть? –

+0

Ничего страшного, просто первый раз, используя этот класс и, возможно, что-то быстрее? –

+0

Если вы имеете в виду более короткий код, нет, нет ничего короче. –

ответ

1

Единственной альтернативой я могу думать

Bitset newBitset = new Bitset(bs1.size()); 
newBitset.or(bs1).and(bs2); 

Вам нужно время на два, чтобы увидеть, что быстрее; моя альтернатива может быть немного быстрее, так как вы не вызываете метод переопределения, и вы не делаете кастинг.

+0

Я должен отметить, что я не ожидаю, что нисходящий поток (который является просто проверкой типа во время выполнения) очень обостряется, и я ожидаю, что компилятор (один из них) полностью оптимизирует его сразу после инкрементального клонирования. –

+0

Согласен; Кроме того, вызов переопределяющего метода не так уж дорог и может быть оптимизирован компилятором –

+0

Хотелось бы увидеть контрольный показатель. Кроме того, я не был бы очень удивлен, если бы компилятор JIT производил машинный код _same_ понемногу. Даже результирующая емкость в обоих случаях одинакова. –

0

Если вам действительно нужна скорость, я бы предположил, что практически ничего не будет выполнено BitSet, это будет почти так же быстро, как побитовые операции с целыми числами - &, | и т. Д. Конечно, у вас нет ряда операций по целые числа с битовой обработкой, которые вы выполняете в объектах BitSet; вы это дадите, когда решите перейти на максимальную скорость.

Смежные вопросы