Java中List集合的遍历
一、对List的遍历有三种方式
- List<String> list = new ArrayList<String>();
- list.add("testone");
- list.add(“testtwo”);
- ...
第一种:
- for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
- ....
- }
这种方式在循环执行过程中会进行数据锁定, 性能稍差, 同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法, 不能使用list.remove方法, 否则一定出现并发访问的错误.
第二种:
- for(String data : list) {
- .....
- }
内部调用第一种, 换汤不换药, 因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
第三种:
- for(int i=0; i<list.size(); i++) {
- A a = list.get(i);
- ...
- }
内部不锁定, 效率最高, 但是当写多线程时要考虑并发操作的问题。
二、测试实例
- package com.inspur.Test;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- /**
- *@author WHD
- *2015-3-5
- */
- @SuppressWarnings("unused")
- public class MapTest {
- private static List<String> list= new ArrayList<String>();
- public static void main(String[]args){
- MapTest mapTest = new MapTest();
- mapTest.initList(list);
- mapTest.foreach(list);
- mapTest.forlist(list);
- mapTest.iteratorList(list);
- }
- //list 集合中添加10万条数据
- public List initList(List<String> list){
- int i=0;
- int num=6000000;
- for(i=0;i<num;i++){
- list.add("list"+i);
- }
- return list;
- }
- //list 集合遍历 foreach
- public void foreach(List<String> list){
- long start= System.currentTimeMillis();
- for(String data:list){
- String value=data;
- }
- long end=System.currentTimeMillis();
- long count=end-start;
- System.out.println("foreach 循环时间"+count);
- }
- // list集合遍历 for
- public void forlist(List<String> list){
- long start=System.currentTimeMillis();
- int i=0;
- for( i=0;i<list.size();i++){
- String value=list.get(i);
- }
- long end=System.currentTimeMillis();
- long count=end-start;
- System.out.println("for list.size() 遍历时间"+count);
- }
- // Iterator 遍历循环
- public void iteratorList(List<String> list){
- long start= System.currentTimeMillis();
- for(Iterator<String> it=list.iterator();it.hasNext();){
- String value=it.next();
- }
- long end=System.currentTimeMillis();
- long count=end-start;
- System.out.println("iterator 遍历时间"+count);
- }
- }