集合输出的四种形式

集合输出

集合输出实际上从JDK1.8开始就在Iterable接口之中提供有一个 forEach()方法,这种输出形式并不是传统输出,也很难在开发中出现。

对于集合有四种输出形式:Iterator迭代输出 , ListIterator双向迭代输出 , Enumeration枚举输出 , foreach输出

1、Iterator迭代输出

JDK1.5之后Collection中多继承了一个Iterable父接口,其中出现了iterator()方法,可以获取Iterator接口对象(JDK1.5之前该方法在Collection接口中)

Iterator定义:

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

Iterator接口中定义方法:

No方法名称类型描述
1boolean hasNext()普通判断是否有数据
2E next()普通取出当前数据
3default void remove()普通删除

使用Iterator输出

public class JavaDemo {
   public static void main(String[] args) throws Exception {
      Set<String> set = Set.of("Hello" , "World" , "!");
      Iterator<String> iterator = set.iterator();
      while (iterator.hasNext()) {
         System.out.println(iterator.next());
      }
   }
}

在Collection中也定义有remove()方法,如果在进行迭代输出时使用了Collection中的remove()方法,会导致迭代失败。

因此如果需要删除,只能使用Iterator中提供的remove()方法(非必须情况下,尽量不使用Iterator中的remove()方法)


面试题:请解释Collection.remove()与Iterator.remove()的区别?

  • 在进行迭代输出的时候如果使用了Collection.remove()则会造成并发更新异常,此时只能利用Iterator.remove()实现正常删除

2、ListIterator双向迭代输出

使用Iterator进行迭代输出有一个特点:只允许有前向后输出

如果要双向迭代处理,必须依靠Listlterator接口

Collection中没有定义获取ListIterator接口对象的方法,但是List中有,所以ListIterator接口是专门为List集合准备的

ListIterator定义如下方法:

  • 判断是否有前一个元素:boolean hasPrevious()
  • 获取当前元素:E previous()

实现双向迭代

public class JavaDemo {
   public static void main(String[] args) throws Exception {
      ArrayList<String> list= new ArrayList<>();
      list.add("Hello");
      list.add("World");
      list.add("!");
      ListIterator<String> iterator = list.listIterator();
      System.out.print("由前向后输出:");
      while (iterator.hasNext()) {
         System.out.print(iterator.next());
      }
      System.out.println();
      System.out.print("由后向前输出:");
      while (iterator.hasPrevious()) {
         System.out.print(iterator.previous());
      }
   }
}
//由前向后输出:HelloWorld!
//由后向前输出:!WorldHello

如果要实现由后向前的遍历,首先要实现由前向后遍历

3、Enumeration枚举输出

Enumeration只为Vector一个类提供服务,要想获取Enumeration接口对象,只能依靠Vector类中提供的方法

  • 获取Enumeration:public Enumeration elements()

Enumeration中定义有两个操作方法:

  • 判断是否有下一个元素:boolean hasMoreElements()
  • 获取当前元素:E nextElement()

使用Enumeration实现输出

public class JavaDemo {
   public static void main(String[] args) throws Exception {
      Vector<String> list= new Vector<>();
      list.add("Hello");
      list.add("World");
      list.add("!");
      Enumeration<String> enu = list.elements();
      while (enu.hasMoreElements()) {
         System.out.println(enu.nextElement());
      }
   }
}

4、foreach输出

使用foreach输出

public class JavaDemo {
   public static void main(String[] args) throws Exception {
      List<String> list= new ArrayList<>();
      list.add("Hello");
      list.add("World");
      list.add("!");
      for (String str : list) {
         System.out.println(str);
      }
   }
}

上一篇:Set集合
下一篇:Map集合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MyRedScarf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值