(一)集合的输出
在类集中提供了以下四种的常见输出方式:
Iterator:迭代输出,是使用最多的输出方式;
ListIterator:是Iterator的子接口,专门用于输出List中的内容;
Enumeration:是一个旧的接口,功能与Iterator类似;
foreach:JDK 1.5之后提供的新功能,可以输出数组或集合。
(二)Iterator接口简介
2.1 Iterator接口操作原理
集合输出的标准操作: “在使用集合输出的时候必须形成以下的一个思路:‘只要是碰到了集合输出的操作,就一定使用Iterator接口’,因为这是最标准的做法”
Iterator接口的操作原理: Iterator是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。
2.2 Iterator接口中的常用方法
No. | 方法 | 类型 | 描述 |
1 | public boolean hasNext() | 普通 | 判断是否有下一个值 |
2 | public E next() | 普通 | 取出当前元素 |
3 | public void remove() | 普通 | 移除当前元素 |
实例操作一:输出Collection中的全部内容
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo01 {
public static void main(String[] args) {
List<String> all = new ArrayList<String>();// 实例化List接口
all.add("I"); // 增加元素
all.add("_"); // 增加元素
all.add("love"); // 增加元素
all.add("_"); // 增加元素
all.add("you"); // 增加元素
Iterator<String> iter = all.iterator(); // 直接实例化Iterator接口S
while (iter.hasNext()) { // 依次判断
System.out.print(iter.next() + "、");// 输出内容
}
}
}
操作二:使用Iterator删除指定内容
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo02 {
public static void main(String[] args) {
List<String> all = new ArrayList<String>();// 实例化List接口
all.add("I"); // 增加元素
all.add("_"); // 增加元素
all.add("love"); // 增加元素
all.add("_"); // 增加元素
all.add("you"); // 增加元素
Iterator<String> iter = all.iterator(); // 直接实例化Iterator接口S
while (iter.hasNext()){ // 依次判断
String str=iter.next();
if("_".equals(str)){
iter.remove();
} else{
System.out.print(str + "、");// 输出内容
}
}
System.out.println("\n删除之后的集合:"+all);
}
}
迭代输出时删除元素的注意点:
正常情况下,一个集合要把内容交给Iterator输出,但是集合操作中也存在一个remove()方法,如果在使用Iterator输出时,集合自己调用了删除方法,则会出现运行时的错误。
不正确的删除方法:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo03 {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 实例化List接口
all.add("I"); // 增加元素
all.add("_"); // 增加元素
all.add("love"); // 增加元素
all.add("_"); // 增加元素
all.add("you"); // 增加元素
Iterator<String> iter = all.iterator(); // 直接实例化Iterator接口S
while (iter.hasNext()) {
String str = iter.next(); // 取出内容
if ("_".equals(str)) { // 判断内容是否是“_”
all.remove(str); // 删除当前元素,使用集合删除 (使用集合删除,这里就有问题,出现异常)
} else {
System.out.print(str + "、"); // 输出元素内容
}
}
System.out.println("\n删除之后的集合:" + all); // 输出集合内容,调用toString()方法
}
}
2.3 ListIterator接口
Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或是由前向后的双向输出,则就必须使用Iterator的子接口 —— ListIterator。 ListIterator接口定义如下: public interface ListIterator<E> extends Iterator<E>
2.3.1 ListIterator接口中的常用方法
No. | 方法 | 类型 | 描述 |
1 | public boolean hasNext() | 普通 | 判断是否有下一个值 |
2 | public E next() | 普通 | 取出当前元素 |
3 | public void remove() | 普通 | 移除当前元素 |
4 | public void add(E o) | 普通 | 将指定元素增加集合 |
5 | public boolean hasPrevious() | 普通 | 判断是否有上一个元素 |
6 | public E previous() | 普通 | 取出当前元素 |
7 | public int nextIndex() | 普通 | 返回下一个元素的索引号 |
8 | public int previousIndex() | 普通 | 返回上一个元素的索引号 |
9 | public void set(E o) | 普通 | 替换元素 |
区别于Iterator:
与Iterator接口不同的是,ListIterator接口只能通过List接口实例化,即:只能输出List接口中的内容。在List接口中定义了可以为ListIterator接口的实例化方法: public ListIterator<E> listIterator()
实例操作一:进行双向迭代
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo01 {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 实例化List接口
all.add("I"); // 增加元素
all.add("_"); // 增加元素
all.add("love"); // 增加元素
all.add("_"); // 增加元素
all.add("you"); // 增加元素
ListIterator<String> iter = all.listIterator();// 实例化ListIterator接口
System.out.print("由前向后输出:"); // 输出信息
while (iter.hasNext()) { // 由前向后输出
String str = iter.next(); // 取出内容
System.out.print(str + "、"); // 输出内容
}
System.out.print("\n由后向前输出:"); // 输出信息
while (iter.hasPrevious()) { // 由前向后输出
String str = iter.previous(); // 取出内容
System.out.print(str + "、"); // 输出内容
}
}}
实例操作二:增加及替换元素
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo02 {
public static void main(String[] args) {
List<String> all = new ArrayList<String>(); // 实例化List接口
all.add("I"); // 增加元素
all.add("_"); // 增加元素
all.add("love"); // 增加元素
all.add("_"); // 增加元素
all.add("you"); // 增加元素
ListIterator<String> iter = all.listIterator(); // 实例化ListIterator接口
System.out.print("由前向后输出:"); // 信息输出
while (iter.hasNext()) { // 由前向后输出
String str = iter.next(); // 取出内容
System.out.print(str + "、"); // 输出内容
iter.set("yes-" + str); // 替换元素
}
System.out.print("\n由后向前输出:"); // 信息输出
iter.add("do"); // 增加元素
while (iter.hasPrevious()) { // 由前向后输出
String str = iter.previous(); // 取出内容
System.out.print(str + "、"); // 输出内容
}
}
}