欢迎来到天天文库
浏览记录
ID:30780231
大小:81.50 KB
页数:9页
时间:2019-01-03
《java提高篇之数组(2)-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、java提高篇Z数组(2)-编程开发技术java提高篇之数组(2)原文出处:chenssy前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面。三.性能?请优先考虑数组在java屮有很多方式来存储一系列数据,而且在操作上面比数组方使的多?但为什么我们还需要使用数组,而不是替代它呢?数组与其他种类的容器之间的区别有三个方面:效率、类型和保存基本类型的能力。在中,数组是一种效率最高的存储和随机访问对彖引用序列的方式。在项目设计中数组使用的越来越少了,而且它确实是没有List、Set这些集合使用方便,但是在某些方面数组还
2、是存在一些优势的,例如:速度,而且集合类的底层也都是通过数组來实现的。这是ArrayList的add()publicbooleanadd(Ee){ensureCapacity(size+1);//IncrementsmodCount!!elemenlData[size++]=e;returntrue;}下面利用数组和list来做一些操作比较。一、求和Longtimel=System,currenlTimeMi11is();for(inti=0;i<100000000;i++){sum+=arrays[i%10];}Longtime2二System.ciHTen
3、tTimeMillis();System,out.println(z,数组求和所花费时间:"+(time2-timel)+"毫秒〃);Longtimc3=Systcm.currcntTimcMillis();for(inti=0;i<100000000;i++){sum+二list.get(i%10);}Longtime4=System.currentTimeMillis();System,out.printin(z,List求和所花费时间:〃+(time4-time3)+〃毫秒〃);Output:数组求和所花费时间:696毫秒List求和所花费时间:3498
4、毫秒从上面的时间消耗上面来说数组对于基本类型的求和计算的速度是集合的5倍左右。其实在list集合中,求和当中有一个致命的动作:list.get(i)。这个动作是进行拆箱动作,Integer对象通过intValue方法自动转换成一个int基木类型,在这里就产生了不必要的性能消耗。?所以在性能要求较高的场景中请优先考虑数组。四、变长数组?数组是定长的,一旦初始化声明后是不可改变长度的。这对我们在实际开发中是非常不方便的,聪明的我们肯定是可以找到方法来实现的。就如java不能实现多重继承一样,我们一样可以利用内部类和接口來实现(请参考:jewa提高篇(九)一-实现多
5、重继承)。那么如何来实现变长数组呢?我们可以利用List集合add方法里而的扩容思路来模拟实现。下面是ArrayList的扩容方法:publicvoidensureCapacity(intminCapacity){modCount++;intoldCapacity=clemcntData・lcngth;/***若当前需要的长度超过数组长度时进行扩容处理*/if(minCapacity>oldCapacity){ObjectoldData[]=clemcntData;intnewCapacity=(oldCapacity*3)/2+1;//扩容if(newCap
6、acity*@paramdatas原始数组*©paramnewLen扩
7、容大小*©returnT[]*/publicstaticT[]expandCapacity(T[]datas,intnewLen){ncwLcn二ncwLcn〈0?datas・lcngth:datas・lcngth+ncwLcn;〃生成一个新的数组returnArrays.copyOf(datas,newLen);}/***@desc对数组进行扩容处理,1・5倍*©authorchenssy*©data2013-12-8*@param*@paramdatas原始数组*@rcturnT[]*/publicstaticT[]expandCapac
8、ity(T[]datas){intne
此文档下载收益归作者所有