I think a more fine-grained method would be a lot more powerful here. As I said above, the BitVector should not be changeable, but other parameters could be very useful. For example, if you knew the minimal index where a bit has changed, this would allow you to keep all array values for earlier positions unchanged on update. Moreover, if you could keep track of the total number of true bits, you could use it to determine the size of the array you need. Then you would not need an ArrayList that expands dynamically on update.