天天看点

集合输出

从JDK1.8开始Iterable接口中提供的用于集合输出的forEach()方法使用较少,常用的四种集合输出形式:Iterator迭代输出、ListIterator双向迭代输出、Enumeration枚举输出、foreach输出

1、Iterator迭代输出

获取Iterator接口对象:public Iterator<E> iterator​()

Iterator接口中定义的方法:

判断是否有数据:public boolean hasNext​()

取出当前数据:public E next​()

删除:default void remove​()

在java.util.Scanner类中使用过上述方法,因为其就是Iterator接口的子类。

示例:

Set<String> all = Set.of("a","v","s") ;

Iterator<String> iter = all.iterator() ; //实例化Iterator对象

while(iter.hasNext()) {

    String str = iter.next() ;

    System.out.println(str) ;

}

【重要】对于Iterator接口中的remove()方法,在Collection接口中也定义有,但是在进行迭代输出的过程中如果使用Collection接口中的remove()方法(all.remove("v"))会报并发更新异常“java.util.ConcurrentModificationException”,不能删除,所以要使用Iterator接口中的remove()方法:iter.remove() ;该方法会删除原始集合中的数据。

2、ListIterator双向迭代输出

使用Iterator进行的迭代输出只允许由前向后输出,进行双向迭代输出必须依靠Iterator的子接口ListIterator实现。Collection接口中没有定义获取ListIterator接口对象的方法,但是List子接口中有,也就是说这个输出接口是专门为List接口准备的。ListIterator接口中定义的新方法:

判断是否有前一个元素:public boolean hasPrevious​()

获取当前元素:public E previous​()

示例:

import java.util.ArrayList ;

import java.util.List ;

import java.util.ListIterator ;

public class JavaDemo {

    public static void main(String[] args) {

        List<String> all = new ArrayList<String>() ;

        all.add("a") ;

        all.add("v") ;

        all.add("s") ;

        ListIterator<String> iter = all.ListIterator() ;

        System.out.println("右前向后输出:") ;

        while(iter.hasNext()) {

            System.out.println(iter.next()) ;

        }

        System.out.println("右后向前输出:") ;

        while(iter.hasPrevious()) {

            System.out.println(iter.Previous()) ;

        }

    }

}

注意:要想实现由后向前遍历必须先实现右前向后遍历。

3、Enumeration枚举输出(JDK1.0)

该接口为Vector类服务,获取Enumeration接口对象就需使用Vector类中的方法:public Enumeration<E> elements​()

Enumeration接口中定义的方法:

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

获取当前元素:public E nextElement​()

4、foreach输出

除了使用迭代接口实现输出之外,从JDK1.5开始加强型for循环也可以实现集合的输出

for(String str : all ) { System.out.println(str) ; } 

5、利用Iterator输出Map集合

Map集合里实际上保存的是一组Map.Entry接口对象(里面包装的是key与value),即仍是单值的保存,而Map集合中的方法:将全部的Map集合转为Set集合:public Set<Map.Entry<K,V>> entrySet​()

集合输出

示例:

public class JavaDemo {

    public static void main(String[] args) {

        Map<Sting,Integer> map = new HashMap<String,Integer>() ;

        map.put("one",1) ;

        map.put("two",2) ;

        map.put("three",3) ;

        Set<Map.Entry<Sting,Integer>> set = map.entrySet() ; //将Map集合变为Set集合

        //利用foreach输出Map集合

        for(Map.Entry<String,Integer> entry : set) {

            System.out.println(entry.getKey()) ;

        }

        //利用Iterator输出Map集合

        Iterator<Map.Entry<Sting,Integer>> iter = set.iterator() ;

        while(iter.hasNext()) {

            Map.Entry<String,Integer> me = iter.next() ;

            System.out.println(me.getKey()) ;

        }

    }

}