文章目录
- 1. 迭代输出 : Iterator (95%)
-
- 案例: 标准的 Iterator 使用
- 案例: 删除元素
- `以后见到了结合输出的问题, 不需要思考直接使用 Iterator 接口`
- 2. ListIterator 双向迭代接口 (0.01%)
-
- 观察 ListIterator 接口的使用
- 3. Enumeration 枚举输出 (4.8 %)
- ==但是要如果取得这个接口的实例化对象, 是不可能依靠 Collection, List, Set 等接口的, 只能够依靠 Vector 子类, 因为 Enumeration 最早就是为 Vector 设计服务的== 在Vector 类中提供有一个取得 Enumeration 对象的方法 : `public Enumeration elements() `
-
- 范例: 使用 Enumeration 输出 :
- 一些操作的类库上, 依然只支持 Enumeration, 而不支持 Iterator, 虽然很少, 但是开发中会使用到.
- 4. 新的输出: foreach (0.1 %)
-
- 范例: 直接使用 foreach 输出
- 总结:
在之前使用集合输出的时候都利用了toString(), 或者是利用了List接口中的get()方法, 但是这些都不是集合的标准的输出模式.
如果从标准上说, 集合的输出一共有四种手段
- Iterator (核心)
- ListIterator
- Enumeration
- foreach
对于 Iterator 接口最初的设计, 里面实际上有三个抽象方法:
- 判断是否有下一个元素: public boolean hasNext() ;
- 取得当前的一个元素: public E next() ;
- 删除元素: public
default
void remove() ; 此方法从 JDK1.8 开始变成一个 default 的完整的方法了
package com.beyond.nothing;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class test {public static void main(String[] args) {List> all = new ArrayList>();
all.add("Hello");
all.add("Hello");
all.add("World");
Iterator> iter = all.iterator();
// 实例化 Iterator接口对象
while (iter.hasNext()){String str = iter.next();
System.out.println(str);
}
}}
对于 Iterator 接口中提供的 remove() 方法, 主要解决的就是集合内容的删除操作(真没什么用).
案例: 删除元素
package com.beyond.nothing;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class test {public static void main(String[] args) {List> all = new ArrayList>();
all.add("Hello");
all.add("Hello");
all.add("o");
all.add("World");
Iterator> iter = all.iterator();
// 实例化 Iterator接口对象
while (iter.hasNext()) {String str = iter.next();
if ("o".equals(str)){//all.remove("o");
// 如果使用此操作, 则删除了 后面被中断执行
iter.remove();
// 删除后, 代码可以继续执行
continue;
}
System.out.println(str);
}
}}
集合的核心功能在于数据的增加和数据的取出, 所以对于这种删除的操作根本没有意义, 开发中可能使用到的机率为 0;
以后见到了结合输出的问题, 不需要思考直接使用 Iterator 接口
2. ListIterator 双向迭代接口 (0.01%) Iterator 输出接口有一个特点: 只能够由前先后进行内容的迭代处理, 而如果要进行双向迭代, 那么就必须依靠 Iterator 的子接口 ListIterator 来实现.首先来观察一下此接口定义的方法:
- 判断是否有上一个元素: public boolean hasPrevious() ;
- 取得当前元素 : public E previous() ;
List 接口提供有如下方法:
取得ListIterator 接口对象 :
public ListIterator listIterator() ;
观察 ListIterator 接口的使用
package com.beyond.nothing;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class test {public static void main(String[] args) {List> all = new ArrayList>();
all.add("Hello");
all.add("Hello");
all.add("o");
all.add("World");
ListIterator> iter = all.listIterator();
System.out.println("从前向后输出!");
while (iter.hasNext()) {System.out.print(iter.next() + ",");
}System.out.println("\n从后向前输出!");
while (iter.hasPrevious()) {System.out.print(iter.previous() + ",");
}
}}
文章图片
如果要实现有后向前的输出, 那么应该首先进行有前到后的输出, 否则无法实现双向.
3. Enumeration 枚举输出 (4.8 %) 在 JDK 1.0 的时候就引入了 Enumeration 输出接口, 而在 JDK 1.5 的时候也针对其也做了更正, 主要是追加了其对泛型的应用.
首先来观察 Enumeration 接口定义:
- 判断是否有下一个元素: public boolean hasMoreElements()
重点重点重点
- 取得元素: public E nextElement() ;
重点重点重点
在Vector 类中提供有一个取得 Enumeration 对象的方法 :
public Enumeration elements()
范例: 使用 Enumeration 输出 :
package com.beyond.nothing;
import java.util.*;
public class test {public static void main(String[] args) {Vector> all = new Vector>();
all.add("Hello");
all.add("Hello");
all.add("o");
all.add("World");
Enumeration> enu = all.elements();
while (enu.hasMoreElements()){System.out.println(enu.nextElement());
}}}
一些操作的类库上, 依然只支持 Enumeration, 而不支持 Iterator, 虽然很少, 但是开发中会使用到. 4. 新的输出: foreach (0.1 %) 从JDK 1.5 开始 foreach可以输出数组, 实际上除了数组之外, 还可以输出集合操作, 不过对于初学者而言不建议这样处理.
范例: 直接使用 foreach 输出
package com.beyond.nothing;
import java.util.*;
public class test {public static void main(String[] args) {Vector> all = new Vector>();
all.add("Hello");
all.add("Hello");
all.add("o");
all.add("World");
for (String str : all) {System.out.println(str);
}}
}
【Java算法及JDK源码探究|Java 集合的输出 (Iterator, ListIterator, Enumeration, foreach)】如果从代码的本质上来讲,此处是少了一个对象, 但是 Iterator 只是一个输出对象, 而所有的内容都是在集合本身, 所以这个输出对象所占用的空间不算什么.
总结:
- 看见集合输出就使用 Iterator 就行了
- Iterator 和 Enumeration 接口中的方法一定要掌握牢固.
推荐阅读
- Java学习笔记|Java学习笔记(4)(继承)
- 游戏|2020级C语言大作业 - 小球进框
- 【项目实战】用 Java 写了一个类QQ界面聊天小项目,可在线聊天!
- Java并发编程|并发编程(九)J.U.C 之 ConcurrentHashMap原理
- Java基础知识和回顾|Java的数据类型转换以及运算符优先级
- java|mac上安装编译器
- Java毕设课设|计算机实战项目之 含论文+辩论PPT+源码等]微信小程序基于微信小程序的校园跑腿+后台管理系统
- 我的开源代码被大公司盗用后(有人承认,有人让我滚!!)
- 职场|自学Python6个月,找到了月薪8K的工作,多亏了这套学习方式