电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java 集合中關(guān)于Iterator和ListIterator的用法說明

瀏覽:4日期:2022-08-20 08:50:55

1.Iterator

Iterator的定義如下:

public interface Iterator<E> {}

Iterator是一個(gè)接口,它是集合的迭代器。集合可以通過Iterator去遍歷集合中的元素。Iterator提供的API接口如下:

Java 集合中關(guān)于Iterator和ListIterator的用法說明

forEachRemaining(Consumer<? super E> action):為每個(gè)剩余元素執(zhí)行給定的操作,直到所有的元素都已經(jīng)被處理或行動(dòng)將拋出一個(gè)異常

hasNext():如果迭代器中還有元素,則返回true。

next():返回迭代器中的下一個(gè)元素

remove():刪除迭代器新返回的元素。

Java 集合中關(guān)于Iterator和ListIterator的用法說明

例子:

import java.util.*;public class TestIterator { public static void main(String[] args) { ArrayList<String> a = new ArrayList<String>(); a.add('aaa'); a.add('bbb'); a.add('ccc'); System.out.println('Before iterate : ' + a); Iterator<String> it = a.iterator(); while (it.hasNext()) { String t = it.next(); if ('bbb'.equals(t)) { it.remove(); } } System.out.println('After iterate : ' + a); }}

我們可以看到:首先往一個(gè)ArrayList里裝了aaa,bbb,ccc,然后進(jìn)行判斷刪除bbb,最后ArrayList里只剩 aaa,ccc。

我們來驗(yàn)證一下:

Java 集合中關(guān)于Iterator和ListIterator的用法說明

注意:

(1)Iterator只能單向移動(dòng)。

(2)Iterator.remove()是唯一安全的方式來在迭代過程中修改集合;如果在迭代過程中以任何其它的方式修改了基本集合將會(huì)產(chǎn)生未知的行為。而且每調(diào)用一次next()方法,remove()方法只能被調(diào)用一次,如果違反這個(gè)規(guī)則將拋出一個(gè)異常。

2.ListIterator

ListIterator是一個(gè)功能更加強(qiáng)大的, 它繼承于Iterator接口,只能用于各種List類型的訪問。可以通過調(diào)用listIterator()方法產(chǎn)生一個(gè)指向List開始處的ListIterator, 還可以調(diào)用listIterator(n)方法創(chuàng)建一個(gè)一開始就指向列表索引為n的元素處的ListIterator。

我們先來看一段關(guān)于ListIterator的描述:

Java 集合中關(guān)于Iterator和ListIterator的用法說明

ListIterator接口定義如下:

Interface ListIterator<E>{}

Java 集合中關(guān)于Iterator和ListIterator的用法說明

包含的方法有:

由以上定義我們可以推出ListIterator可以:

(1)雙向移動(dòng)(向前/向后遍歷).

(2)產(chǎn)生相對于迭代器在列表中指向的當(dāng)前位置的前一個(gè)和后一個(gè)元素的索引.

(3)可以使用set()方法替換它訪問過的最后一個(gè)元素.

(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一個(gè)元素.

使用例子:

import java.util.*;public class TestListIterator{ public static void main(String[] args) { ArrayList<String> a = new ArrayList<String>(); a.add('aaa'); a.add('bbb'); a.add('ccc'); System.out.println('Before iterate : ' + a); ListIterator<String> it = a.listIterator() while (it.hasNext()) { System.out.println(it.next() + ', ' + it.previousIndex() + ', ' + it.nextIndex()); } while (it.hasPrevious()) { System.out.print(it.previous() + ' '); } System.out.println(); it = a.listIterator(1);//調(diào)用listIterator(n)方法創(chuàng)建一個(gè)一開始就指向列表索引為n的元素處的ListIterator。 while (it.hasNext()) { String t = it.next(); System.out.println(t); if ('ccc'.equals(t)) { it.set('nnn'); } else { it.add('kkk'); } } System.out.println('After iterate : ' + a); }}

解釋:

第1行:新建一個(gè)ArrayList,命名為a;

第2行、第3行和第4行分別一次往ArrayList里添加了aaa,bbb,ccc;

第5行:輸出ArrayList里的值:aaa,bbb,ccc

第6行:調(diào)用了a的listIterator方法,并使ListIterator類型的it指向,也就是說ListIterator類型的it指向了ArrayList容器, 通過調(diào)用ArrayList的listIterator方法來進(jìn)行容器內(nèi)的遍歷。

第7行、8、9行,調(diào)用it的hasNext()方法進(jìn)行判斷容器中是否還有元素,如果有,則輸出元素,當(dāng)前元素前一個(gè)元素的索引,當(dāng)前元素后一個(gè)元素的索引,

所以會(huì)輸出:

aaa,0,1

bbb,1,2

ccc,2,3

第10行,此時(shí),it已經(jīng)指向了ArrayList的最后一個(gè)元素,在這里調(diào)用了ListIterator的hasPrevious()方法,就是,開始往前遍歷(上面是往后遍歷) 在這個(gè)while循環(huán)中,會(huì)以此輸出:ccc bbb aaa。

第13行:輸出換行。

第14行:現(xiàn)在it應(yīng)該已經(jīng)再一次指向ArrayList的開頭。在這一行中,it又被用到了,同樣的用到了ArrayList的listIteror方法,這一次不同,而是it指向了listIteror的第二個(gè)元素,因?yàn)槭?,第一個(gè)元素的索引是0,也就是說it指向了ArrayList里的bbb。bbb是開頭的元素。

第15行:再一次是調(diào)用了ListIterator的hasnext()方法,來判斷ArrayList里是否還有元素。

第16行:調(diào)用了it的next()方法,所謂next方法,是指找到剩下元素的第一個(gè)元素,也就是bbb,并把它賦值了String 的 t;

第17行:輸出bbb

第18行:19、20,21行,如果bbb與ccc相等則將bbb set成nnn,否則,add()來添加kkk,那么在哪里添加呢,是在next方法返回的元素之前,next方法返回的元素是ccc,也就是在bbb,和ccc之間添加kkk。現(xiàn)在容器中有aaa、bbb、kkk以及ccc。返回到第15行,再次以此往下執(zhí)行,會(huì)進(jìn)行if判斷,然后把ccc設(shè)置nnn。

第24行,最后輸出ArrayList里的元素:aaa、bbb、kkk、nnn。

我們來驗(yàn)證一下:

Java 集合中關(guān)于Iterator和ListIterator的用法說明

Iterator和ListIterator區(qū)別

我們在使用List,Set的時(shí)候,為了實(shí)現(xiàn)對其數(shù)據(jù)的遍歷,我們經(jīng)常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍歷的過程,只需要每次取出一個(gè)你想要的數(shù)據(jù)進(jìn)行處理就可以了。但是在使用的時(shí)候也是有不同的。List和Set都有iterator()來取得其迭代器。

對List來說,你也可以通過listIterator()取得其迭代器,兩種迭代器在有些時(shí)候是不能通用的,Iterator和ListIterator主要區(qū)別在以下方面:

(1)ListIterator有add()方法,可以向List中添加對象,而Iterator不能

(2)ListIterator和Iterator都有hasNext()和next()方法,可以實(shí)現(xiàn)順序向后遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷。Iterator就不可以。

(3)ListIterator可以定位當(dāng)前的索引位置,nextIndex()和previousIndex()可以實(shí)現(xiàn)。Iterator沒有此功能。

(4)都可實(shí)現(xiàn)刪除對象,但是ListIterator可以實(shí)現(xiàn)對象的修改,set()方法可以實(shí)現(xiàn)。Iierator僅能遍歷,不能修改。

因?yàn)長istIterator的這些功能,可以實(shí)現(xiàn)對LinkedList等List數(shù)據(jù)結(jié)構(gòu)的操作。其實(shí),數(shù)組對象也可以用迭代器來實(shí)現(xiàn)。

以上這篇Java 集合中關(guān)于Iterator和ListIterator的用法說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 高温高压釜(氢化反应釜)百科| 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 水平筛厂家-三轴椭圆水平振动筛-泥沙震动筛设备_山东奥凯诺矿机 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | PAS糖原染色-CBA流式多因子-明胶酶谱MMP-上海研谨生物科技有限公司 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 劳动法网-专业的劳动法和劳动争议仲裁服务网| 上海办公室装修_上海店铺装修公司_厂房装潢设计_办公室装修 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 北京亦庄厂房出租_经开区产业园招商信息平台 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 制冷采购电子商务平台——制冷大市场 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 小威小说网 - 新小威小说网 - 小威小说网小说搜索引擎 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 |