for循环 增强for循环 iterator遍历集合的区别与用法

本文对比了Java中不同集合类型的遍历方法,包括ArrayList、LinkedList等,并探讨了增强for循环与迭代器(iterator)的适用场景及性能差异。指出ArrayList适合使用普通for循环,而LinkedList则推荐使用增强for循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.手先增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。

对于ArrayList,Vector其核心是一个数组,如果明确知道List的实例是ArrayList,Vector,当然用for(inti=0;i<lst.size();i++){}这种方式是最快的.当然用Iterator的话,其实是相关无几,Iterator基本上都是指针操作,Iterator本身的处理会增加一点点的开销,跟踪一下源码就可以知道.

Iterator好处:通用,对于所有集合,使用Iterator性能都一样,客户端自身不维护遍历集合的"指针",所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。
客户端从不直接和集合类打交道,它总是控制Iterator,向它发送"向前","向后","取当前元素"的命令,就可以间接遍历整个集合。

for(i=0;...)方法有一个缺点:如果List的实例是LinkedList等非"数组"存储方式的时候,遍历集合的开销会差别很大!就以LinkedList来说,以下是get(i)方法来取元素的主要代码,我们可以看到,LinkedList内的get(i)方法,用了循环方式来返回元素,性能肯定会差.

Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
if (index< 0 ||index>=size)
throw new IndexOutOfBoundsException( "Index:" +index+
",Size:" +size);
Entry<E>e=header;
if (index<(size>> 1 )){
for ( int i= 0 ;i<=index;i++)
e=e.next;
} else {
for ( int i=size;i>index;i--)
e=e.previous;
}
return e;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值