2011-02-03 2 views

ответ

20

Метод cardinality() возвращает количество установленных бит.

+1

Если вы задавались вопросом, как это реализовано: It не хранит внутренний счетчик, он перебирает «long []», который используется для хранения битов и вызывает «Long # bitCount» для каждого из Эм. – Thilo

+0

Под обложками используется Long.bitCount(). На современных процессорах есть команда CPU для этого, popcnt. В последних версиях Java Long.bitCount() использует эту инструкцию. Просто используйте -XX: + UsePopCountInstruction, чтобы включить его (это значение по умолчанию в последних версиях Java) – user2056182

3

(Предполагая, что вы не хотите вызвать кардинальное())

int count = 0; 
for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) { 
    count++; 
} 

see javadoc

0
BitSet B1 = new BitSet(3); 
B1.set(0); 
B1.cardinality(); 

Выход:

1 
+5

Это не намного больше, чем ответ, ссылающийся на этот метод, опубликованный 6 лет назад. – Dukeling