2012-07-15 109 views
0

在Java改变,用二进制字符串(例如“00010010”,零在开始创建我的程序的目的,这些二进制字符串时添加的)工作。我有功能String.equals()按位和二进制数

private static boolean isJinSuperSets(String J, List<String> superSets) { 

    for (String superJ : superSets) 
     if (superJ.equals(J)) return true; 

    return false; 
} 

检查二进制字符串J是否包含在二进制字符串superSets的列表中。

我在字符串对象上使用equals(),但我想通过将二进制字符串转换为二进制数并按位操作AND来查看它们是否相等来加速此代码。

能否请您给我如何实现这一目标的几个技巧?

+5

如果你希望你的程序尽可能慢,通过各种手段做数学与字符串。 – harold 2012-07-15 08:58:14

+2

可能是http://stackoverflow.com/questions/4211705/binary-to-text-in-java的答案。 – vainolo 2012-07-15 08:58:42

+3

如果您只是在方法范围内进行转换,我认为这不会加速任何事情(恰恰相反)。你需要改变你的界面以使用二进制格式。顺便说一下,BigInteger可以用于此目的。 – Thilo 2012-07-15 08:58:48

回答

1

这里INT:

for (String superJ : superSets) 
     return Integer.valueOf(superJ,2) == Integer.valueOf(J,2); 
} 

您有基准测试(照顾第一次总是慢)的速度。

最好的方式来优化,如果J是不止一次使用:具有J2为整数的地方,并测试它。

+0

它说任何二进制字符串适合整数? – Thilo 2012-07-16 01:52:08

+0

如果一个整数字符串的长度为零=一个字符<= 32或长度小于一个字符长度为64个,那么它是OK的 – 2012-07-16 06:34:23