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

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

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

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

1.Iterator

Iterator的定義如下:

public interface Iterator<E> {}

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

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

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

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

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

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

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

例子:

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。

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

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

注意:

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

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

2.ListIterator

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

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

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

ListIterator接口定義如下:

Interface ListIterator<E>{}

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

包含的方法有:

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

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

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

(3)可以使用set()方法替換它訪(fǎng)問(wèn)過(guò)的最后一個(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è)一開(kāi)始就指向列表索引為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); }}

解釋?zhuān)?/b>

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

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

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

第6行:調(diào)用了a的listIterator方法,并使ListIterator類(lèi)型的it指向,也就是說(shuō)ListIterator類(lèi)型的it指向了ArrayList容器, 通過(guò)調(diào)用ArrayList的listIterator方法來(lái)進(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()方法,就是,開(kāi)始往前遍歷(上面是往后遍歷) 在這個(gè)while循環(huán)中,會(huì)以此輸出:ccc bbb aaa。

第13行:輸出換行。

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

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

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

第17行:輸出bbb

第18行:19、20,21行,如果bbb與ccc相等則將bbb set成nnn,否則,add()來(lái)添加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。

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

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

Iterator和ListIterator區(qū)別

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

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

(1)ListIterator有add()方法,可以向List中添加對(duì)象,而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沒(méi)有此功能。

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

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 宏源科技-房地产售楼系统|线上开盘系统|售楼管理系统|线上开盘软件 | 加热制冷恒温循环器-加热制冷循环油浴-杭州庚雨仪器有限公司 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司| 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 河南中专学校|职高|技校招生-河南中职中专网 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 溶氧传感器-pH传感器|哈美顿(hamilton)| 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 304不锈钢无缝管_不锈钢管厂家 - 隆达钢业集团有限公司 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 |