2016-05-05 156 views
1

說我必須比較Java中的一些字符串對象,而且我必須像大量程序一樣做一百萬次。這些字符串要麼完全相同,要麼不應該算作匹配。哪種方法使用效率更高,等於(對象相等)還是匹配(正則表達式)?舉個例子:字符串匹配的效率,等於與匹配方法

String a = "JACK", b = "JACK", c = "MEG"; 
a.equals(b);//True 
a.equals(c);//False 

a.matches(b);//True 
a.matches(c);//False 

兩種方法給我我想要的結果,但我想知道哪一個會給出高容量的處理更高效。

+3

向我們展示瞭如何使用'matches'比較兩個字符串'了'和'B'。 (我這麼說是因爲我認爲在實際嘗試使用它時,你會意識到'等於'有多少工作要做)。 – weston

+0

謝謝,我編輯了這個問題來舉一個例子,關注效率方面。 @WiktorStribiżew,是否可以刪除「重複」狀態?我希望現在清楚的是,另一個答案沒有解決我的問題 - 我瞭解match()和equals()之間的區別,但想知道哪一個更有效。 – Mattallica

回答

4

你可以自己檢查一下,通過大量的字符串並在循環中比較它們。在循環之前和之後,您將獲取當前系統時間,然後獲取開始和結束時間的差異。請看這裏:Runtime。但是你應該小心,因爲你的硬件可能會有不同的結果。此外,瞭解JVM可能在後臺執行的優化也很重要。這就是爲什麼你應該比較多串,也許讓一個平均值

List<String> bigList = new List<String>(); // put many many values in this list 
String pattern = "pattern";  
long start = System.nanoTime(); 

for(int i=0;i<bigList.length;i++) { 
    bigList.get(i).equals(pattern); //in another program, check for matches(pattern) 
} 

long end = System.nanoTime(); 

System.out.println((end-start)/bigList.size()) // this is the average time 
+0

很好的答案,我確實嘗試過這樣的事情,而等號方法會將水從水中吹出。 – Mattallica