java 中 BitSet 的 Set 操作的时间复杂度是多少?

What is the Time Complexity of Set operation of a BitSet in java?

我有一个场景,我必须将 BitSet 索引的范围设置为 1。 所以如果我使用

   /*
    *Code snippet
    */
    BitSet myBitSet = new BitSet(100);
    myBitSet.set(10, 50);

    //**************************

以上代码的时间复杂度是多少?它会遍历 40 个元素还是会执行某种位操作?

出于某种原因,它没有在 Javadoc 中指定,但 Oracle 的实现肯定是 O(1) 获取、设置、翻转和清除一个参数; O(N) 有两个参数。 'Vector of bits' 可能是一个提示。

因为它使用数组,所以 set/get 都是 O(1)

设置操作将设置位(fromIndex 将为 10,toIndex 将为 49) 它将遍历从 10 到 49 的 40 个元素。是的,复杂度将为 O(1)

对于单个位,它将是 O(1),设置 n 位的复杂度是 O(N)。

对于怀疑论者:设置 n 位是 O(N),因为设置 10_000 位比设置 1_000 位花费大约 10 倍的时间。

也就是说,调用 myBitSet.set(10,50) 比编写 for (int i=10; i<=50; i++) myBitSet.set(i);

更有效