|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)
上一个帖子已先容了基础范例和援用范例的功能差别(次要是因为内存分派体例分歧招致)。为了给各位看官加深印象,明天拿一个详细的例子来实地操纵一把,看看优化的效果怎样。
★关于需求
起首形貌一下需求,详细以下:给定一个String对象,过滤失落除数字(字符0-9)之外的别的字符。请求工夫开支尽量小。过滤函数的原型以下:Stringfilter(Stringstr);
针对上述需求,我写了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情况是JDK1.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倍。
<p>
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak, |
|