集合输出

从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()) ;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值