一、对List的遍历有三种方式   
    

  1. List<String> list = new ArrayList<String>();
  2. list.add("testone");
  3. list.add(“testtwo”);
  4. ...

 

    
   第一种:   

  1. for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
  2. ....
  3. }

  

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

  1. for(String data : list) {
  2. .....
  3. }

  

   内部调用第一种,    换汤不换药,  因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
    
   第三种:   

  1. for(int i=0; i<list.size(); i++) {
  2. A a = list.get(i);
  3. ...
  4. }

  

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

 

二、测试实例

  1. package com.inspur.Test;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Map.Entry;
  9.  
  10. /**
  11. *@author WHD
  12. *2015-3-5
  13. */
  14. @SuppressWarnings("unused")
  15. public class MapTest {
  16. private static List<String> list= new ArrayList<String>();
  17. public static void main(String[]args){
  18. MapTest mapTest = new MapTest();
  19. mapTest.initList(list);
  20. mapTest.foreach(list);
  21. mapTest.forlist(list);
  22. mapTest.iteratorList(list);
  23. }
  24. //list 集合中添加10万条数据
  25. public List initList(List<String> list){
  26. int i=0;
  27. int num=6000000;
  28. for(i=0;i<num;i++){
  29. list.add("list"+i);
  30. }
  31. return list;
  32. }
  33. //list 集合遍历 foreach
  34. public void foreach(List<String> list){
  35. long start= System.currentTimeMillis();
  36. for(String data:list){
  37. String value=data;
  38. }
  39. long end=System.currentTimeMillis();
  40. long count=end-start;
  41. System.out.println("foreach 循环时间"+count);
  42. }
  43. // list集合遍历 for
  44. public void forlist(List<String> list){
  45. long start=System.currentTimeMillis();
  46. int i=0;
  47. for( i=0;i<list.size();i++){
  48. String value=list.get(i);
  49. }
  50. long end=System.currentTimeMillis();
  51. long count=end-start;
  52. System.out.println("for list.size() 遍历时间"+count);
  53. }
  54. // Iterator 遍历循环
  55. public void iteratorList(List<String> list){
  56. long start= System.currentTimeMillis();
  57. for(Iterator<String> it=list.iterator();it.hasNext();){
  58. String value=it.next();
  59. }
  60. long end=System.currentTimeMillis();
  61. long count=end-start;
  62. System.out.println("iterator 遍历时间"+count);
  63. }
  64.  
  65. }

  

版权声明:本文为itzyz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/itzyz/p/10844951.html%20