了解下JAVA的Java功能优化[2]:字符串过滤实战
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); //此处挪用某个详细的过滤函数
}
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, 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 是一种将安全性(Security)列为第一优先考虑的语言 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
页:
[1]
2