关键词搜索

源码搜索 ×
×

(Java)集合的输出

发布2020-02-15浏览3675次

详情内容

如果要输出 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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (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);
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (3)实例操作三:迭代输出时删除元素的注意点
    正常情况下,一个集合要把内容交给 Iterator 输出,但是集合操作中也存在一个 remove() 方法,所以如果在使用 Iterator 输出时集合自己调用了删除方法,则会错误

    错误的执行方式

            while (iter.hasNext()) {
                String str = iter.next();//取出内容
                if ("_".equals(str)){//判断内容是否是"_"
                //这里采用集合删除元素,错误
                    all.remove(str);
                    //删除当前元素的正确的方法:iter.remove();
                }
            }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、双向迭代输出: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 + "、");//输出内容
                }
            }
        }
        
          2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23

        在这里插入图片描述
        程序中实现了双向的迭代输出,但是这种输出方式只有 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 + "、");//输出内容
                }
            }
        }
        
          2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21

        在这里插入图片描述
        在 ListIterator 接口中使用 set() 方法修改了每个元素的内容,而且也可以使用 ListIterator 接口中的 add() 方法向集合中增加元素。

        三、Java 新支持:foreach

        使用 foreach 除了可以完成数组的输出,对于集合也同样支持

        for(类 对象:集合){
        	//集合操作
        }
        
          2
        • 3
        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 + "、");
                }
            }
        }
        
          2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11

        实际开发中建议还是使用 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() + "、");//输出元素
                }
            }
        }
        
          2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15

        相关技术文章

        点击QQ咨询
        开通会员
        返回顶部
        ×
        微信扫码支付
        微信扫码支付
        确定支付下载
        请使用微信描二维码支付
        ×

        提示信息

        ×

        选择支付方式

        • 微信支付
        • 支付宝付款
        确定支付下载