java for list a i_【转】Java中 List的遍历

本文介绍了Java中List的三种遍历方式:迭代器遍历、增强for循环以及传统的for循环,并分析了它们的性能和适用场景。特别强调了迭代器在并发修改时的注意事项以及效率问题。对于多线程环境,推荐使用传统for循环避免并发访问错误。
摘要由CSDN通过智能技术生成

原文网址:http://blog.csdn.net/player26/article/details/3955906

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ListTest {

public static void main(String[] args) {

List list = new ArrayList();

list.add(1);

list.add(2);

list.add(3);

for (Iterator i = list.iterator(); i.hasNext();)

System.out.println(i.next()); // line 1

}

}

public class ListTest2 {

public static void main(String[] args){

List list = new ArrayList();

list.add(new Integer(100));

list.add(new Float(150.60));

list.add(new String("abc"));

for(Iterator i = list.iterator(); i.hasNext();)

System.out.println(i.next());

//   List list = new ArrayList();

//         list.add(1);

//         list.add(2);

//         list.add(3);

//         for(Integer i : list){

//         System.out.println(i);        // OK

//         }

}

}

//虽然List的Generic是Integer,但.next()返回的类型是Object

public class ListTest3 {

public static void main(String[] args) {

// List list = new ArrayList();

// list.add(1);

// list.add(2);

// list.add(3);

// for(Iterator i = list.iterator(); i.hasNext();){

// Integer integerRef = (Integer) i.next(); //line 1

// //Compile Error

// System.out.println(integerRef); // line 2

// }

List list = new ArrayList();

list.add(1);

list.add(2);

list.add(3);

for (Iterator i = list.iterator(); i.hasNext();) {

Integer integerRef = i.next(); // line 1

// OK

System.out.println(integerRef); // line 2

}

}

}

对List的遍历有三种方式

List    list    =    new    ArrayList();

list.add(new    A());

list.add(new    A());

...

第一种:

for(Iterator    it    =    list.iterator();    it.hasNext();    )    {

....

}

这种方式在循环

执行过程中会进行数据锁定,    性能稍差,    同时,如果你想在循环过程中去掉某个元素,只能调用it.remove方法,    不能使用list.remove方法,    否则一定出并发访问的错误.

第二种:

for(A    a    :    list)    {

.....

}

内部调用第一种,    换汤不换药,    这种循环方式还有其他限制,    不建议使用它

第三种:

for(int    i=0;    i

A    a    =    list.get(i);

...

}

内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值