Меньше слов и больше кода, здесь эксперимент, на мой взгляд, отвечает на вопрос:
import java.util.BitSet;
public class BitSetExperiment {
public static void main(String[] args) {
BitSet bs0=new BitSet();
BitSet bs1;
System.out.println("created:\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
bs0.set(15);
System.out.println("set(15):\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
bs0.set(63);
System.out.println("set(63):\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
bs0.set(86);
System.out.println("set(86):\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
bs0.clear(86);
System.out.println("clear(86):\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
bs0.clear(63);
System.out.println("clear(63):\tLength,Size bs0: "+bs0.length()+" , "+bs0.size());
System.out.println("Cloning to bs1...\n");
bs1=(BitSet)bs0.clone();
System.out.println("Length,Size bs0: "+bs0.length()+" , "+bs0.size());
System.out.println("Length,Size bs1: "+bs1.length()+" , "+bs1.size());
}
}
Выход:
created: Length,Size bs0: 0 , 64
set(15): Length,Size bs0: 16 , 64
set(63): Length,Size bs0: 64 , 64
set(86): Length,Size bs0: 87 , 128
clear(86): Length,Size bs0: 64 , 128
clear(63): Length,Size bs0: 16 , 128
Cloning to bs1...
Length,Size bs0: 16 , 64
Length,Size bs1: 16 , 64
Глядя на выходе, я обнаружил две вещи:
- Когда вы очищаете более значимые биты, битсет не урезает его размер, но, возможно, это делается с использованием других механизмов, более сложных как @Boris Spider предлагает в своем комментарии.
- При клонировании BitSet, оригинал, а также клон представлены в минимально возможном распределении (в факторах 64 бит)
Если 'BitSet' подстриженной его размер, когда вы нолик на границе , вы бы выросли производительность. Если «BitSet» должен был автоматически обрезать свой размер, это, скорее всего, произойдет в соответствии с [лучшей практикой] (https://ece.uwaterloo.ca/~dwharder/aads/Algorithms/Array_resizing/) - что немного сложнее чем показывают ваши тесты. –
Полностью согласен, очень вероятно, что Java фактически обрезает биты, но не сразу после очистки пространства. Я поставлю эту возможность в ответ – onlycparra