如果要输出 Collection、Set 集合中的内容,可以将其转换为对象数组输出,而使用 List 则可以直接通过 get() 方法输出,但是这都不是集合的标准输出,类集中提供了以下 4 种的输出方式:

JAVA组合输出结果 java输出集合_集合的输出


文章目录

  • 一、迭代输出:Iterator
  • 1. Iterator 接口简介
  • 2. Iterator 接口的相关操作
  • 二、双向迭代输出:ListIterator
  • 1. ListIterator 接口简介
  • 2. ListIterator 接口的相关操作
  • 三、Java 新支持:foreach
  • 四、废弃的接口:Enmeration


一、迭代输出:Iterator

1. Iterator 接口简介

只要是碰到了集合输出,就一定要使用 Iterator 接口

Iterator 是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出:

JAVA组合输出结果 java输出集合_System_02


Iterator 接口定义:

public interface Iterator<E>

Iterator 接口在使用时也需要指定泛型,当然此处指定的泛型类型最好与集合中的泛型类型一致:

JAVA组合输出结果 java输出集合_JAVA组合输出结果_03

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 接口中的常用方法:

JAVA组合输出结果 java输出集合_List_04


与 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 + "、");//输出内容
        }
    }
}

JAVA组合输出结果 java输出集合_System_05


程序中实现了双向的迭代输出,但是这种输出方式只有 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 + "、");//输出内容
        }
    }
}

JAVA组合输出结果 java输出集合_java_06


在 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 类进行了扩充增加了泛型的操作:

JAVA组合输出结果 java输出集合_java_07


该接口不存在删除操作,同时要想使用该接口可以通过 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() + "、");//输出元素
        }
    }
}