2016-07-21 5 views
1

У меня есть функция, внутри которой я хотел бы выполнять операции, такие как OR, AND, set и другие. Я сначала подумал о массиве логических, но проблема в том, что я не могу выполнять операции AND и OR на них (однако я мог установить для определенных элементов значение true). Я также пытался использовать BiSet, но проблема в том, что минимальный размер BitSet равен 64 (бит). Я хотел бы, чтобы он хранил определенное количество бит (например, 15), из которого я могу выполнить итерацию позже, чтобы получить их. В C# существует класс BitArray, который имеет дело с такой проблемой; Java, похоже, не имеет такого. Любые предложения по этой проблеме будут высоко оцененыСоздание BitSet определенной длины в java

+0

Почему «' '' новый битСеть (15) '' 'отвечает вашим потребностям? – cdelmas

+0

Итак, действительно интересный вопрос больше похож: что дало вам неправильное впечатление? – GhostCat

+0

@cdelmas, я сказал это, потому что, когда я делаю, например: BitSet a = новый BiSet (15), после того, как я вызываю a.length, я получаю 64. – user3841581

ответ

5

Я думаю, вы ошибаетесь. java.util.Bitset допускает любое количество бит; существует ограничение «только> 64 бит». Да, биты, возможно, внутренне используют длинные значения для хранения этих битов; но нигде не говорится, что вы можете использовать только 64 бит, 128 и так далее.

Другими словами: при настройке бицепса на 15 бит он выделяет long[1]; то же самое для 63 бит; и если вам нужно 70 бит, он будет выделять long[2].

Короткий рассказ: этот класс - именно то, что вы ищете; и я не вижу, чтобы какая-либо другая реализация могла быть значительно более эффективной.

+0

благодарим вас за четкое объяснение, теперь мне ясно , Могу ли я также создать массив BiSet, и если да, то как мне перебирать их? – user3841581

+0

Ну, возможно, вы начнете с чтения некоторых книг на Java. Понимаете, это не «школа программирования», где люди рассказывают вам вещи, которые действительно документированы повсюду. Но хорошо; вы отправитесь для 'Bitset [] mySets = new BitSet [] {нового BitSet (5), нового BitSet (6), ..}'. Но в 2016 году вы, скорее всего, захотите использовать динамические коллекции, такие как 'List mySets = new ArrayList <>()' ... и затем добавьте объекты BitSet по мере необходимости. Но, как сказано: это действительно основной материал, который вы изучаете * изучением *; не спрашивая людей о stackoverflow. – GhostCat