2012-07-15 41 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