我对BitSet类进行了分类,以添加一些其他方法.其中一个被称为“折叠”.
它将BitSet分成两半并将它们与一个或“组合”.
(增加信息密度)
这可以工作,但折叠的BitSet的大小(1024)仍然是原始大小.
码:
BitSet firstHalf;
BitSet secondHalf;
for(int i = nrOfTimes; i > 0; i-- ){
firstHalf = this.get(0, this.size()/2);
secondHalf = this.get(this.size()/2, this.size());
firstHalf.or(secondHalf);
this.clear();
this.or(firstHalf);
}
返回一个具有所需长度的新BitSet可能是可行的,但只能为每次迭代创建一个新的较小的BitSet,但仍然需要重新分配它(myClass = myClass.fold()).如果折叠,则对原始版本没有兴趣.这个想法是节省空间(内存和数据库).
有没有办法减少当前BitSet的大小? (一个“技巧”,我没有看到?)
解决方法:
我认为做myClass = myClass.fold()是可以的,你不必担心“节省空间”.
如果对旧对象没有兴趣(即,没有人对它有引用),垃圾收集器无论如何都会为你清理内存.它针对这类用例进行了优化.
这种模式可以在java库中的所有不可变类中找到.以str = str.substring(i)为例;或bigInt = bigInt.multiply(BigInteger.TEN);等等