为什么Java`BitSet`没有`shiftLeft`和`shiftRight`函数?

Ano*_*sse 13 java bit-shift bitset

是否有任何特殊原因导致这些缺失?

它们确实存在BigInteger,但由于它们的不可变设计模式BigInteger通常非常慢.BitSet是好得多,因为它是可变的,但我真的很怀念shift功能(<<>>>longS).因为BitSet,就地移位也是有用的,以及循环旋转.

我已经看到了对Shifting a Java BitSet的回复(get(off, len)用于移位;但这需要复制).

别误会我的意思.我知道在哪里报告错误.我只是想知道是否有一个特别的理由要省略它们,例如一些设计模式或这样的概念.特别是因为它们包括在内BigInteger.

Eli*_*ght 9

从概念上讲,a BitSet通常/经常用于跟踪许多设置,使得集合中的每个比特具有特定含义.因此,在这种情况下,轮班操作毫无意义.

你已经清楚地发现了a的另一个有用的目的BitSet,但它超出了BitSet可能设想的范围.

  • 引用 [the docs](http://docs.oracle.com/javase/6/docs/api/java/util/BitSet.html) 的话:BitSet 被设想为 _" 一个根据需要增长的位向量。 ” 这比您建议的典型用途要普遍得多。其他向量类(Vector、ArrayList 等)没有“移位”操作,但它们确实有“插入”和“删除”操作,可以有效地执行相同的操作。BitSet 具有类似的功能是有意义的,但事实并非如此。 (2认同)