Java中List集合的遍歷實例詳解
一、對List的遍歷有三種方式
List<String> list = new ArrayList<String>(); list.add("testone"); list.add(“testtwo”); ...
第一種:
for(Iterator<String> it = list.iterator(); it.hasNext(); ) { .... }
這種方式在循環(huán)執(zhí)行過程中會進(jìn)行數(shù)據(jù)鎖定, 性能稍差, 同時,如果你想在尋歡過程中去掉某個元素,只能調(diào)用it.remove方法, 不能使用list.remove方法, 否則一定出現(xiàn)并發(fā)訪問的錯誤.
第二種:
for(String data : list) { ..... }
內(nèi)部調(diào)用第一種, 換湯不換藥, 因此比Iterator 慢,這種循環(huán)方式還有其他限制, 不建議使用它。
第三種:
for(int i=0; i<list.size(); i++) { A a = list.get(i); ... }
內(nèi)部不鎖定, 效率最高, 但是當(dāng)寫多線程時要考慮并發(fā)操作的問題。
二、測試實例
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萬條數(shù)據(jù) 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 循環(huán)時間"+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 遍歷循環(huán) 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); } }
三、測試結(jié)果:
(1)、第一次
foreach 遍歷時間:55
for list.size()遍歷時間:47
iterator 遍歷時間:51
(2)、第二次
foreach 遍歷時間:54
for list.size()遍歷時間:44
iterator 遍歷時間:50
(3)、第三次
foreach 遍歷時間:48
for list.size()遍歷時間:43
iterator 遍歷時間:44
從測試的結(jié)果我們可以明顯的看到效率了!
以上所述是小編給大家介紹的Java中List集合遍歷詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot整合druid及多數(shù)據(jù)源配置的demo
這篇文章主要介紹了springboot整合druid及多數(shù)據(jù)源配置的demo,本篇主要分兩部分 ①springboot整合druid的代碼配置,以及druid的監(jiān)控頁面演示;②對實際場景中多數(shù)據(jù)源的配置使用進(jìn)行講解,需要的朋友可以參考下2024-01-01Java中String、StringBuffer和StringBuilder的區(qū)別與使用場景
在Java編程中,String、StringBuffer和StringBuilder是用于處理字符串的常見類,它們在可變性、線程安全性和性能方面有所不同,具有一定的參考價值,感興趣的可以了解一下2024-05-05Java 實戰(zhàn)范例之線上新聞平臺系統(tǒng)的實現(xiàn)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+jdbc+mysql實現(xiàn)一個線上新聞平臺系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置
本篇文章主要介紹了詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)
這篇文章主要介紹了詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07使用Spring的StopWatch實現(xiàn)代碼性能監(jiān)控的方法詳解
在開發(fā)過程中,偶爾還是需要分析代碼的執(zhí)行時間,Spring 框架提供了一個方便的工具類 StopWatch,本文將介紹 StopWatch 的基本用法,并通過示例演示如何在項目中使用 StopWatch 進(jìn)行代碼性能監(jiān)控2023-12-12Mybatis模糊查詢之三種定義參數(shù)方法和聚合查詢、主鍵回填實現(xiàn)方法
這篇文章主要介紹了Mybatis模糊查詢之三種定義參數(shù)方法和聚合查詢、主鍵回填實現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03springboot的類加載器(org.springframework.boot.loader)過程詳解
這篇文章主要介紹了springboot的類加載器(org.springframework.boot.loader),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11