【发布时间】:2015-01-25 14:16:42
【问题描述】:
在被question 所吸引后,我尝试复制用户 Simon Nickerson 建议的算法以及 docjar 提供的最佳答案的算法:docjar algorithm。
我对两者都进行了测试(希望我没有通过删除代理对 - 处理部分来做出任何性能破坏性更改),我发现 docjar 算法几乎比 Simon 的算法快四倍。谁能指出这两种算法之间对速度有影响的显着差异,因为我自己似乎无法弄清楚。
干杯!
(更新)我使用 System.nanoTime() 进行了 100 次试验,我发现 docjar 的平均时间约为 4380 纳秒,而较慢的算法约为 13684 纳秒。
我修改后的 docjar 算法(快 4 倍):
public static String fastReverse(String original)
{
char[] comps = original.toCharArray();
int n = comps.length - 1;
for(int j = (n - 1) >> 1 ; j >= 0; --j)
{
char temp = comps[j];
char temp2 = comps[n - j];
comps[j] = temp2;
comps[n - j] = temp;
}
return new String(comps);
}
Simon 的改进算法(较慢):
public static String reverse(String original)
{
char[] comps = original.toCharArray();
int n = comps.length;
for(int i = 0; i < n / 2; i++)
{
char temp = comps[i];
comps[i] = comps[n - i - 1];
comps[n - i - 1] = temp;
}
return new String(comps);
}
【问题讨论】:
-
在我们深入之前,您究竟是如何对这些方法进行基准测试的?
-
当然,由于我是该主题的业余爱好者,请随意提出任何更高级的基准测试方法
-
@AlexKoukoulas:我建议你先通读这篇文章。如果您的结果仍然相同,那么值得一看。 stackoverflow.com/questions/504103/…
标签: java string algorithm reverse