概述:Iteration:迭代器,集合的专用遍历方式
- Iterator
Iterator() 返回在此 collection 的元素上进行迭代的迭代器 - boolean hasNext() 如果返回仍有元素可以迭代,则返回 true
- E next() 返回迭代的下一个元素
- package com.collection.Demo04;
-
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Iterator;
-
- public class Test02 {
- //迭代器——属于 集合中专有的
- public static void main(String[] args) {
- // ArrayList
arrayList = new ArrayList(); - Collection
collection = new ArrayList(); - collection.add("mayikt01");
- collection.add("mayikt02");
- collection.add("mayikt03");
- //之前遍历集合中的数据
- // for (int i = 0; i < collection.size(); i++) {
- // String s = collection.get(i);//ArrayList中是有get(),Collection中没有get()
- // System.out.println(s);
- // }
-
- //使用迭代器集合遍历
- System.out.println("使用集合中的专有迭代器遍历数据");
- // System.out.println(iterator.next()+","+iterator.hasNext());//mayikt01,true,调用第1次next(),取出第1个元素
- // System.out.println(iterator.next()+","+iterator.hasNext());//mayikt02,true,调用第2次next(),取出第2个元素
- // System.out.println(iterator.next()+","+iterator.hasNext());//mayikt03,false,调用第3次next(),取出第3个元素
- // System.out.println(iterator.next());//没有第4个元素,报错
- /**
- * next 底层会使用计数器 每次调用 .next()时 计数+1
- * iterator.hasNext()
- * 判断是否可以取出元素,如果可以取出元素 则返回 true 否则 false
- */
- for (String s : collection) {//=>while (iterator.hasNext()){ //如果迭代器 能够获取到元素 返回true
- System.out.println(s);
- }
- }
- }
MayiktIterator.java 迭代器
- package com.collection.Demo04;
-
- import java.util.List;
-
- /**
- * 手写Iterator 迭代器
- * next
- * hasNext
- */
- public class MayiktIterator {
- private final List list;
-
- public MayiktIterator(List list) {
- this.list = list;
- }
-
- //迭代器 计数器 初始值 0
- private int count = 0;
-
- public Object next() {//后面学到泛型是可以优化的
- if (list == null) {
- throw new MayiktException("list is null");
- }
- if (count >= list.size()) {
- //说明:集合中 没有继续可以访问到的元素,下标越界了
- throw new MayiktException("无法继续向下获取元素了");
- }
- return list.get(count++);
- }
-
- public boolean hasNext() { //hasNext() 判断集合中 是否可以继续获取元素 如果能够获取到元素 返回true
- // if (count == list.size()){} //取次数==list.size() 集合中个数 相等
-
- return count != list.size();
-
- }
- }
MayiktException.java 异常
- package com.collection.Demo04;
-
- public class MayiktException extends RuntimeException {
- public MayiktException(String errorMsg){
- super(errorMsg);
- }
- }
Test03.java
- package com.collection.Demo04;
-
- import java.util.ArrayList;
- import java.util.List;
-
- /**
- * 手写迭代器测试
- */
-
- public class Test03 {
- public static void main(String[] args) {
- List
list = new ArrayList(); - list.add("mayikt01");
- list.add("mayikt02");
- list.add("mayikt03");
- MayiktIterator mayiktIterator = new MayiktIterator(list);
- // System.out.println(mayiktIterator.next());
- // System.out.println(mayiktIterator.next());
- // System.out.println(mayiktIterator.next());
- // System.out.println(mayiktIterator.next());//报错
- while (mayiktIterator.hasNext()){
- System.out.println(mayiktIterator.next());
- }
- }
- }
- package com.collection.Demo04;
-
- import java.util.ArrayList;
-
- public class Test01 {
- public static void main(String[] args) {
- /**
- * List接口下 实现类 ArrayList LinkedList 存入数据 都是保证有序性
- * 存入数据可以重复
- */
- ArrayList
arrayList = new ArrayList<>(); - for (int i = 0; i < 10; i++) {
- arrayList.add("i:" + i);
- }
- for (String str : arrayList) {
- System.out.println(str);//有序性
- }
-
- arrayList.add("数据可以重复");
- arrayList.add("数据可以重复");
- arrayList.add("数据可以重复");
- }
- }
下一篇文章:集合中独有的方法