集合的四种输出方式

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

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

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

public Iterator<E> 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;


三、Enumberation枚举迭代输出

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

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

主要的api:

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

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

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




输出:

vector1

vector2

vector3

四、foreach输出(日常常用)


输出结果为:

str1

str2

str3

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

原因详见:https://blog.csdn.net/sukier_JE/article/details/79898892

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

posted @ 2020-07-05 20:12  moutory  阅读(58)  评论(0编辑  收藏  举报  来源