【发布时间】:2018-07-05 07:46:02
【问题描述】:
我想大幅提高操作的时间性能,我最好将其描述为有点明智的操作。
下面是一个BitFile类的构造函数,以三个BitFile为参数。无论第一个参数和第二个参数(firstContender 和 secondContender)同意哪个位,都取自 firstContender 到正在构造的 BitFile。他们不同意的任何一点都来自supportContender。
data 是存储结果的类字段和BitFile 类的主干。
compare(byte,byte) 如果两个字节的值相同,则返回 true。
add(byte,int) 采用一个表示位的字节和要提取的位内的索引,使用第二个类字段“索引”并在 add(byte,int) 中递增以放置下一个位。
'BitFile.get(int)' 返回一个只有特定位为 1 的字节,如果是 1,如果第二个字节的第二位是1,否则为 0。
异或位运算可以快速告诉我两个BitFile 中哪些位不同。是否有任何快速的方法来使用 Xor 的结果,其中所有的零都由firstContender 的等效位表示,所有的零都由supportContender 的等效位表示,类似于
三操作数按位运算符?
public BitFile(
BitFile firstContender,BitFile secondContender,BitFile supportContender)
{
if(firstContender.getLength() != secondContender.getLength())
{
throw new IllegalArgumentException(
"Error.\n"+
"In BitFile constructor.\n"+
"Two BitFiles must have identical lengths.");
}
BitFile randomSet = supportContender;
int length = firstContender.getLength();
data = new byte[length];
for(int i = 0; i < length*8;i++)
{
if(compare(firstContender.get(i),secondContender.get(i)))
{
add(firstContender.get(i),i%8);
}
else
{
add(randomSet.get(i),i%8);
}
}
}
【问题讨论】:
-
对于大型集合的按位运算,我建议使用
BitSet,每个值使用 1 位,速度更快也更小。