如果要输出 Collection、Set 集合中的内容,可以将其转换为对象数组输出,而使用 List 则可以直接通过 get() 方法输出,但是这都不是集合的标准输出,类集中提供了以下 4 种的输出方式:
文章目录
一、迭代输出:Iterator
1. Iterator 接口简介
只要是碰到了集合输出,就一定要使用 Iterator 接口
Iterator 是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出:
Iterator 接口定义:
public interface Iterator<E>
Iterator 接口在使用时也需要指定泛型,当然此处指定的泛型类型最好与集合中的泛型类型一致:
2. Iterator 接口的相关操作
(1)实例操作一:输出 Collection 中的全部内容
public class Test{
public static void main(String[] args) {
List<String> all = new ArrayList<String>();//实例化 List 接口
all.add("hello");
all.add("_");
all.add("world");
Iterator<String> iter = all.iterator();//直接实例化 Iterator 接口
while (iter.hasNext()) {
System.out.print(iter.next() + "、");//输出内容
}
}
}
(2)实例操作二:使用 Iterator 删除指定内容
public class Test{
public static void main(String[] args) {
List<String> all = new ArrayList<String>();//实例化 List 接口
all.add("hello");
all.add("_");
all.add("world");
Iterator<String> iter = all.iterator();//直接实例化 Iterator 接口
while (iter.hasNext()) {
String str = iter.next();//取出内容
if ("_".equals(str)){//判断内容是否是"_"
iter.remove();//删除当前元素
}
}
System.out.println("\n删除之后的集合:" + all);
}
}
(3)实例操作三:迭代输出时删除元素的注意点
正常情况下,一个集合要把内容交给 Iterator 输出,但是集合操作中也存在一个 remove() 方法,所以如果在使用 Iterator 输出时集合自己调用了删除方法,则会错误
错误的执行方式:
while (iter.hasNext()) {
String str = iter.next();//取出内容
if ("_".equals(str)){//判断内容是否是"_"
//这里采用集合删除元素,错误
all.remove(str);
//删除当前元素的正确的方法:iter.remove();
}
}
二、双向迭代输出:ListIterator
1. ListIterator 接口简介
Iterator 接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或是由前向后的双向输出,则必须使用 Iterator 的子接口 - ListIterator
ListIterator 接口定义:
public interface ListIterator<E> extends Iterator<E>
ListIterator 接口中的常用方法:
与 Iterator 不同,ListIterator 接口只能通过 List 接口实例化,即只能输出 List 接口中的内容。在 List 接口中定义了可以为 ListIterator 接口的实例化方法:
public ListIterator<E> listIterator()
2. ListIterator 接口的相关操作
(1)实例操作一:进行双向迭代
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test{
public static void main(String[] args) {
List<String> all = new ArrayList<String>();
all.add("hello");
all.add("_");
all.add("world");
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 + "、");//输出内容
}
}
}
程序中实现了双向的迭代输出,但是这种输出方式只有 List 接口才可以做到。
在使用 ListIterator 接口进行双向输出时,如果想完成由后向前的输出,一定要先进行由前向后的输出
(2)实例操作二:增加及替换元素
使用 add() 或 set() 方法可以增加或替换集合中的元素,但是这样的操作在开发中不建议使用
public class Root{
public static void main(String[] args) {
List<String> all = new ArrayList<String>();//实例化List接口
all.add("hello");
all.add("_");
all.add("world");
ListIterator<String > iter = all.listIterator();
System.out.print("由前向后输出:");
while (iter.hasNext()){
String str = iter.next();//取出内容
System.out.print(str + "、");
iter.set("java-" + str);//替换元素
}
System.out.print("\n由后向前输出:");
iter.add("jdk");
while (iter.hasPrevious()){
String str = iter.previous();
System.out.print(str + "、");//输出内容
}
}
}
在 ListIterator 接口中使用 set() 方法修改了每个元素的内容,而且也可以使用 ListIterator 接口中的 add() 方法向集合中增加元素。
三、Java 新支持:foreach
使用 foreach 除了可以完成数组的输出,对于集合也同样支持:
for(类 对象:集合){
//集合操作
}
public class Test{
public static void main(String[] args) {
List<String> all = new ArrayList<String>();
all.add("hello");
all.add("_");
all.add("world");
for (String str:all){//使用 foreach 输出
System.out.print(str + "、");
}
}
}
实际开发中建议还是使用 Iterator 接口完成输出功能
四、废弃的接口:Enmeration
Enumeration 是一个旧的类,在 JDK 1.5 后为 Enmeration 类进行了扩充增加了泛型的操作:
该接口不存在删除操作,同时要想使用该接口可以通过 Vector 类,进行实例化。
import java.util.Enumeration;
import java.util.Vector;
public class Test{
public static void main(String[] args) {
Vector<String> all = new Vector<String >();//只能使用 Vector
all.add("hello");
all.add("_");
all.add("world");
Enumeration<String> enu = all.elements();//实例化 Enumeration
while (enu.hasMoreElements()){
System.out.print(enu.nextElement() + "、");//输出元素
}
}
}