您的位置:首页 > 编程语言 > Java开发

Java性能优化:遍历

2016-07-06 15:57 357 查看

说说自己踩到的坑

某个项目中遍历一个
List
集合,该集合比较大,大概有几万条数据,我使用了
for
循环遍历:

public void readList(List<String> list) {
if (list != null) {
for (int i=0; i<list.size(); i++) {
// do something...
}
}
}

做测试的时候发现程序执行特别慢,找了好久找到了原因,就是上面的方法中的问题:由于方法参数中给定的
List
集合可能是
ArrayList
,也可能是
LinkedList
。当遍历
LinkedList
的时候,如果集合很大,会出现程序执行效率慢的问题。

将上面的方法重构:

public void readList(List<String> list) {
if (list != null) {
Itarator<String> iter = list.iterator():
while (iter.hasNext()) {
// do something...
}
}
}

重构后程序执行确实快了不少,这源于
ArrayList
LinkedList
内部实现的区别,
LinkedList
随机读取要比
ArrayList
慢,关于
ArrayList
LinkedList
区别不多说了,其他网站有很多异同点的比较。

总结一下

除非遍历的过程中要获取集合中元素的索引使用
for
循环,否则遍历集合尽量使用
Iterator
迭代器。

另外,还可以使用
forEach
循环:

public void readList(List<String> list) {
if (list != null) {
for (String str : list) {
// do something...
}
}
}

forEach
循环是
Iterator
写法的简化版,也不用担心数组越界,它的内部实现也是使用
Iterator
迭代器(可以通过反编译后查看)。不过功能上没有
Iterator
强大,比如在
forEach
调用集合的
remove()
方法会导致
java.util.ConcurrentModificationException
异常,所以要根据具体操作选取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: