Java性能优化[2]:字符串过滤实战[Java编程]
本文“Java性能优化[2]:字符串过滤实战[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
上一个帖子已经介绍了基本范例和引用范例的性能差别(主如果由于内存分配方法差别招致).为了给各位看官加深印象,本日拿一个具体的例子来实地操作一把,看看优化的效果若何.
★关于需求
首先描写一下需求,具体以下:给定一个String对象,过滤掉除数字(字符'0'- '9')以外的别的字符.要求时间开销尽大概小.过滤函数的原型以下:String filter(String str);
针对上述需求,我写了5个差别的过滤函数.为了论述便利,辨别称为filter1到filter5. 此中filter1性能最差、filter5性能最好.在你接着看后续的内容之前,你先暗自考虑一下,假如由你 来实现该函数,大约会写成什么样?最好把你想好的函数写下来,便于背面的比较.
★代码实现
◇测试代码
为了便利测试性能,先预备好一个测试代码,具体以下:
class Test
{
public static void main(String[] args)
{
if(args.length != 1)
{
return;
}
String str = "";
long nBegin = System.currentTimeMillis();
for(int i=0; i<1024*1024; i++)
{
str = filterN(args[0]); //此处调用某个具体的过滤函数
}
long nEnd = System.currentTimeMillis();
System.out.println(nEnd- nBegin);
System.out.println(str);
}
};
在没有想好你的实现方法之 前,先别偷看后续内容哦!别的,先注明下,我利用的Java环境是JDK 1.5.0-09,利用的测试字符串为 “D186783E36B721651E8AF96AB1C4000B”.由于机械性能不尽相同,你在自己机械上测试的 后果大概和我下面给出的数值不太一样,但趋向应当是差不多的.
◇版本1
先来发表性能 最差的filter1,代码以下:
private static String filter1(String strOld)
{
String strNew = new String();
for(int i=0; i<strOld.length(); i++)
{
if('0'<=strOld.charAt(i) && strOld.charAt(i) <='9')
{
strNew += strOld.charAt(i);
}
}
return strNew;
}
假如你的代码不幸和filter1近似,那你的Java功底可就是相当糟糕了, 连字符串拼接需求用StringBuffer来优化都没搞懂得.
为了和后续比较,先记下filter1的处理 时间,大约在8.81-8.90秒之间.
◇版本2
再来看看filter2,代码以下:
private static String filter2(String strOld)
{
StringBuffer strNew = new StringBuffer();
for(int i=0; i<strOld.length(); i++)
{
if('0'<=strOld.charAt(i) && strOld.charAt(i)<='9')
{
strNew.append(strOld.charAt(i));
}
}
return strNew.toString();
}
其实方才在评价filter1的时刻,已经泄露了filter2的天机.filter2通过利用 StringBuffer来优化衔接字符串的性能.为什么StringBuffer衔接字符串的性能比String好,这个已经 是老生常谈,我就不细说了.尚不清楚的同学自己上Google一查便知.我预计应当有挺多同学会写出类 似filter2的代码.
filter2的处理时间大约为2.14-2.18秒,晋升了大约4倍.
以上是“Java性能优化[2]:字符串过滤实战[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |