(Java)集合的输出

如果要输出 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() + "、");//输出元素
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值