java enumberation_集合的四种输出方式

一、iterator迭代输出(最为常用)

Collection接口自JDK1.5之后,开始继承了Iterable父接口,并可以通过iterator()方法来获取到iterator对象来进行迭代。主要用到的api有以下三个:

public boolean hasnext()    -> 用于判断是否有下一个待迭代元素

public Iterator next() -> 用于获取迭代对象

public void remove();   -> 用于删除该迭代对象

```public static void main(String[] args) {

List list =new ArrayList<>();

list.add("STR1");

list.add("STR2");

list.add("STR3");

//获取iterator对象

Iterator iterator = list.iterator();

while (iterator.hasNext()){

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

}

}

```

输出的结果为

STR1

STR2

STR3

二、ListIterator 双向迭代输出

这种迭代的方式使用情况比较少,特别之处在于一般的迭代是单向的从前往后迭代,但是ListIterator还支持从后往前迭代。

同时,Collection接口中并没有定义ListIterator的获取方法,想要获取ListIterator对象,相关的定义方法是自JDK1.2开始有的

```

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

/**

* Created by moutory on 2020-07-05.

*/

public class IteratorTest {

public static void main(String[] args) {

List list =new ArrayList<>();

list.add("STR1");

list.add("STR2");

list.add("STR3");

//获取ListIterator对象

ListIterator listIterator = list.listIterator();

System.out.println("向后迭代输出");

while (listIterator.hasNext()){

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

}

System.out.println("向前迭代输出");

while ((listIterator.hasPrevious())){

System.out.println(listIterator.previous());

}

}

}

```

输出结果为:

向后迭代输出

STR1

STR2

STR3

向前迭代输出

STR3

STR2

STR1

注意:ListIterator并不是想象中的任意就可以往前迭代,而是要先调用next()方法,将指针拨到最后,才能通过previous()方法获取到前面的元素,否则直接使用previous获取到的对象为0;

93cf5d8bc58e

93cf5d8bc58e

三、Enumberation枚举迭代输出

Enumberation是在JKD1.0的时候就出现的输出接口,主要是为了Vetor集合类使用。

注:vetor集合类其实跟arrayList相似,不同点是Vector是线程安全的

主要的api:

public Enumeration  elements();  -> 获取enum对象

public boolean hasMoreElement()   -> 和iterator相似,判断是否有下一个元素

public E nextElement();   ->获取下一个迭代元素

93cf5d8bc58e

输出:

vector1

vector2

vector3

四、foreach输出(日常常用)

93cf5d8bc58e

输出结果为:

str1

str2

str3

总结起来,对于集合元素的迭代输出使用,很多时候我们用到的多是第一种和最后一种(其中使用第一种可能会更加贴合方法设计的初衷),同时,使用第一种方法进行迭代的时候要注意,中间不要使用list的remove方法去移除元素,要使用iterator的remove,否则会报并发修改异常。

其实就是modCount和expectedModCount的同步问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值