2014-07-21 129 views
-1

這兩個自定義比較器中哪一個效率最高? (用在數千陣列的矢量)自定義比較器的效率

//Compares arrays by their first element, then second if equal 
Comparator<String[]> comparator = new Comparator<String[]>() { 
     public int compare(String[] c1, String[] c2) { 
      int comparison; 
      if((comparison=(c1[0].compareTo(c2[0])))==0) return c1[1].compareTo(c2[1]); 
      else return comparison; 
     } 
}; 

//Compares arrays by their first element, then second if equal 
Comparator<String[]> comparator = new Comparator<String[]>() { 
     public int compare(String[] c1, String[] c2) { 
      if(c1[0].compareTo(c2[0])==0) return c1[1].compareTo(c2[1]); 
      else return c1[0].compareTo(c2[0]); 
     } 
} 
+3

您是否嘗試過對它們進行基準測試? – JonK

+1

或看到這些甚至被編譯成不同的字節碼? – pamphlet

+0

也許你應該去問代碼審查? http://codereview.stackexchange.com/ – 1337

回答

2

第一個是更有效的,因爲如果第一元件的不同之您在第二個再次返回比較代替的比較結果等,從而節省了一個比較。嚴格按照「少花功夫=少花時間」的原則。

這就是說,如果字符串不是很長並且共享一個公共前綴,String.compare()會非常快。所以你可能在實踐中看不到差異。

+0

謝謝!這就是我需要的。 – ltalhouarne

+0

@ lolkidoki這並不意味着效率需要奇怪的編碼,如條件下的分配。請注意,您沒有通過這樣保存單個字符。 – maaartinus