【Java】集合输出的方法

集合输出的方法

集合输出一共有四种手段:Iterator、ListIterator、Enumeration、foreach

- 迭代输出:Iterator

在JDK1.5之前,在Collection接口中就定义有iterator()方法,通过此方法可以取得Iterator接口的实例化对象;而在JDK1.5之后,将此方法提升为Iterable接口中的方法。无论你如何提升,只要Collection有这个方法,那么List、Set也一定有此方法。

​ 对于Iterator接口最初的设计里面实际有三个抽象方法:

	1. 判断是否有下一个元素:`public boolean hasNext();`
	2. 取得当前元素:`public E next();`
	3. 删除元素:`public default void remove();,`此方法从JDK1.8开始变为default完整方法

​ 范例:标准的Iterator使用

public class TestDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hehe");
        list.add("haha");
        list.add("xixi");
        Iterator<String> iterator = list.iterator();//实例化Iterator对象
        while (iterator.hasNext()){
            String str = iterator.next();
            System.out.println(str);
        }
    }
}
/*
*	hehe
*	haha
*	xixi
*/

对于Iterator接口中提供的remove()方法主要解决的就是集合内容的删除操作。

public class TestDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        list.add("hello");
        list.add("world");
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String str = iterator.next();
            if(str.equals("world")){
                iterator.remove();//此时使用集合提供的list.remove()方法,会产生ConcurrentModificationException,原因是modCount与excptedModCount数不同(源码)
              //使用iterator.remove()则不会报错
                continue;
            }
            System.out.println(str);
        }
    }
}
//hello
//hello
双向迭代接口:ListIterator

Iterator输出有一个特点:只能够由前向后进行内容的迭代,而如果要想进行双向迭代,那么就必须依靠Iterator的子接口:ListIterator来实现。

此接口定义的方法:

1.判读是否有上一个元素:public ListIterator listIterator();

2.取得上一个元素:public E previous();

Iterator接口对象是由Collection接口支持的,但是ListIterator是由List接口支持的,List接口提供有如下方法:

  • 取得ListIterator接口对象:public ListIterator listIterator();

范例:观察ListIterator接口使用

public class Test11 {
    public static void main(String[] args) {
        List<String> list  = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        ListIterator<String> listIterator = list.listIterator();
        System.out.println("从前到后输出");
        while(listIterator.hasNext()){
            String str = listIterator.next();
            System.out.println(str);
        }
        System.out.println("从后往前输出");
        while(listIterator.hasPrevious()){
            String str2 = listIterator.previous();
            System.out.println(str2);
        }
    }
}
/*从前到后输出
1
2
3
4
从后往前输出
4
3
2
1
*/

先进行从前向后的输出,再进行从后往前的输出,否则无法实现双向

Enumeration枚举输出

在JDK1.0的时候就引入了Enumeration输出接口,而在JDK1.5的时候对其也做了更正,主要是追加了泛型的应用。首先来观察Enumeration的接口定义:

​ 1.判断是否有下一个元素:public boolean hasMoreElements();

​ 2.取得元素:public E nextElement();

但是要取得这个接口的实例化对象,是不能依靠Collection、List、Set等接口的。只能依靠Vector子类,因为Enumeration最早的设计就是为了Vector服务的,在Vector类中提供有一个取得Enumeration接口对象的方法

  • 取得Enumeration接口对象:public Enumeration<E> elements();

范例:使用Enumeration输出

/**
 * Enumeration接口的使用
 */

public class TestDemo{
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("hehe");
        vector.add("haha");
        Enumeration<String> enumeration = vector.elements();
        while(enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }
    }
}
//hehe
//haha
foreach输出

从JDK1.5开始,foreach可以用来输出数组,实际上除了数组之外也可以输出集合

public class TestDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hehe");
        list.add("haha");
        list.add("hahah");
        for(String str : list){
            System.out.println(str);
        }
    }
}
//hehe
//haha
//hahah
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值