2014-07-21 92 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