if (e == null)
return null;
if (e.hash == hasheq(k, e.key))
return e.value;
e = e.next;
}
}
其实就是再次利用Hash值取出相应的Entry做比较得到结果,所以使用第一中循环相当于两次进入HashMap的Entry
中而第二个循环取得Entry的值之后直接取key和value,效率比第一个循环高 。其实按照Map的概念来看也应该是用第二个循环好一点 , 它本来就是key和value的值对,将key和value分开操作在这里不是个好选择 。
27、array(数组) 和 ArryList的使用
array([]):最高效;但是其容量固定且无法动态改变;
ArrayList:容量可动态增长;但牺牲效率;
基于效率和类型检验,应尽可能使用array,无法确定数组大小时才使用ArrayList!
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法 , 如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法 。
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错 。
注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查 。
从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了
28、尽量使用HashMap 和ArrayList ,除非必要,否则不推荐使用HashTable和Vector,后者由于使用同步机制,而导致了性能的开销 。
29、StringBuffer 和StringBuilder的区别:
java.lang.StringBuffer线程安全的可变字符序列 。一个类似于 String 的字符串缓冲区,但不能修改 。
StringBuilder 。与该类相比,通常应该优先使用 java.lang.StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快 。为了获得更好的性能 , 在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它的容量 。当然,如果你操作的字符串长度不超过 16 个字符就不用了 。相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%-15% 左右的性能提升,但却要冒多线程不安全的风险 。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非你能确定你的系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,否则还是用 StringBuffer 吧 。
30、尽量避免使用split
除非是必须的,否则应该避免使用split,split由于支持正则表达式 , 所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源 , 如果确实需要频繁的调用split,可以考虑使用apache的 StringUtils.split(string,char),频繁split的可以缓存结果 。
其他补充:
1、及时清除不再使用的对象 , 设为null
2、尽可能使用final,static等关键字
3、尽可能使用buffered对象
如何优化代码使JAVA源文件及编译后CLASS文件更小
1 尽量使用继承,继承的方法越多,你要写的代码量也就越少
2 打开JAVA编译器的优化选项: javac -O 这个选项将删除掉CLASS文件中的行号,并能把
一些private, static,final的小段方法申明为inline方法调用
3 把公用的代码提取出来
4 不要初始化很大的数组,尽管初始化一个数组在JAVA代码中只是一行的代码量,但
编译后的代码是一行代码插入一个数组的元素 , 所以如果你有大量的数据需要存在数组
中的话,可以先把这些数据放在String中,然后在运行期把字符串解析到数组中
5 日期类型的对象会占用很大的空间,如果你要存储大量的日期对象,可以考虑把它存储为
推荐阅读
- 姓氏头像直播素材,姓氏头像生成器软件更新下载
- 电商如何博取同情赚钱,电商怎么搞起来
- 如何去电脑推广软件给别人,电脑怎么推广
- 百度超级链小程序怎么预约,百度超级链为什么停止了更新
- java代码乘法口诀 java编程乘法口诀表
- c语言程序设计所学内容及收获,c语言程序设计总结与体会
- 手机上的虚拟机在哪,手机上的虚拟机在哪下载
- 鹏鹏为什么没有直播了,鹏鹏现在在哪里直播啊
- 关于vb.netsms通知的信息