我对 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);
等为例
关于java - 调整 java BitSet 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3922120/