Java类集之Iterator接口

(一)集合的输出

         在类集中提供了以下四种的常见输出方式:

         Iterator:迭代输出,是使用最多的输出方式;

         ListIterator:是Iterator的子接口,专门用于输出List中的内容;

         Enumeration:是一个旧的接口,功能与Iterator类似;

         foreach:JDK 1.5之后提供的新功能,可以输出数组或集合。

(二)Iterator接口简介

2.1 Iterator接口操作原理

       集合输出的标准操作: “在使用集合输出的时候必须形成以下的一个思路:‘只要是碰到了集合输出的操作,就一定使用Iterator接口’,因为这是最标准的做法”

        Iterator接口的操作原理: Iterator是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出。

           fda7695919158f895cf99dad00e0c0080a1.jpg

2.2 Iterator接口中的常用方法

No.

方法

类型

描述

1

public boolean hasNext()

普通

判断是否有下一个值

2

public E next()

普通

取出当前元素

3

public void remove()

普通

移除当前元素

实例操作一:输出Collection中的全部内容

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo01 {
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>();// 实例化List接口
		all.add("I"); 			    // 增加元素
		all.add("_"); 				// 增加元素
		all.add("love"); 			// 增加元素
        all.add("_"); 				// 增加元素
		all.add("you");             // 增加元素
		Iterator<String> iter = all.iterator();	// 直接实例化Iterator接口S
		while (iter.hasNext()) {			    // 依次判断
			System.out.print(iter.next() + "、");// 输出内容
		}
	}
}

操作二:使用Iterator删除指定内容

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo02 {
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>();// 实例化List接口
		all.add("I"); 			    // 增加元素
		all.add("_"); 				// 增加元素
		all.add("love"); 			// 增加元素
        all.add("_"); 				// 增加元素
		all.add("you");             // 增加元素
		Iterator<String> iter = all.iterator();	// 直接实例化Iterator接口S
		while (iter.hasNext()){ // 依次判断          			    
          String str=iter.next();
           if("_".equals(str)){
           iter.remove();
             } else{
               System.out.print(str + "、");// 输出内容
              }
			}   
              System.out.println("\n删除之后的集合:"+all);
	}
}

迭代输出时删除元素的注意点:

       正常情况下,一个集合要把内容交给Iterator输出,但是集合操作中也存在一个remove()方法,如果在使用Iterator输出时,集合自己调用了删除方法,则会出现运行时的错误。

不正确的删除方法:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo03 {
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>(); 	// 实例化List接口
		all.add("I"); 				    // 增加元素
		all.add("_"); 				    // 增加元素
		all.add("love"); 				// 增加元素
        all.add("_"); 				    // 增加元素
		all.add("you"); 				// 增加元素
		Iterator<String> iter = all.iterator(); 	// 直接实例化Iterator接口S
		while (iter.hasNext()) {
			String str = iter.next();    // 取出内容
			if ("_".equals(str)) {		 // 判断内容是否是“_”
				all.remove(str); 		 // 删除当前元素,使用集合删除 (使用集合删除,这里就有问题,出现异常)
			} else {
				System.out.print(str + "、");	// 输出元素内容
			}
		}
		System.out.println("\n删除之后的集合:" + all);	// 输出集合内容,调用toString()方法
	}
}

2.3 ListIterator接口

      Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或是由前向后的双向输出,则就必须使用Iterator的子接口 —— ListIterator。 ListIterator接口定义如下: public interface ListIterator<E> extends Iterator<E>

2.3.1 ListIterator接口中的常用方法

No.

方法

类型

描述

1

public boolean hasNext()

普通

判断是否有下一个值

2

public E next()

普通

取出当前元素

3

public void remove()

普通

移除当前元素

4

public void add(E o)

普通

将指定元素增加集合

5

public boolean hasPrevious()

普通

判断是否有上一个元素

6

public E previous()

普通

取出当前元素

7

public int nextIndex()

普通

返回下一个元素的索引号

8

public int previousIndex()

普通

返回上一个元素的索引号

9

public void set(E o)

普通

替换元素

区别于Iterator:

          与Iterator接口不同的是,ListIterator接口只能通过List接口实例化,即:只能输出List接口中的内容。在List接口中定义了可以为ListIterator接口的实例化方法: public ListIterator<E> listIterator()

实例操作一:进行双向迭代

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo01 {
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>(); 	// 实例化List接口
		all.add("I"); 				// 增加元素
		all.add("_"); 					// 增加元素
		all.add("love"); 				// 增加元素
         all.add("_"); 					// 增加元素
		all.add("you"); 				// 增加元素
		ListIterator<String> iter = all.listIterator();// 实例化ListIterator接口
		System.out.print("由前向后输出:");			// 输出信息
		while (iter.hasNext()) { 				// 由前向后输出
			String str = iter.next();			// 取出内容
			System.out.print(str + "、");		// 输出内容
		}
		System.out.print("\n由后向前输出:");		// 输出信息
		while (iter.hasPrevious()) { 			// 由前向后输出
			String str = iter.previous();		// 取出内容
			System.out.print(str + "、");		// 输出内容
		}
	}}

实例操作二:增加及替换元素

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo02 {
	public static void main(String[] args) {
		List<String> all = new ArrayList<String>(); 	// 实例化List接口
		all.add("I"); 				// 增加元素
		all.add("_"); 				// 增加元素
		all.add("love"); 				// 增加元素
        all.add("_"); 				// 增加元素
		all.add("you"); 				// 增加元素 
		ListIterator<String> iter = all.listIterator();	// 实例化ListIterator接口
		System.out.print("由前向后输出:");		// 信息输出
		while (iter.hasNext()) { 			// 由前向后输出
			String str = iter.next();		// 取出内容
			System.out.print(str + "、");		// 输出内容
			iter.set("yes-" + str); 		// 替换元素
		}
		System.out.print("\n由后向前输出:");		// 信息输出
		iter.add("do"); 				// 增加元素
		while (iter.hasPrevious()) { 			// 由前向后输出
			String str = iter.previous();		// 取出内容
			System.out.print(str + "、");		// 输出内容
		}
	}
}

 

转载于:https://my.oschina.net/u/3544533/blog/1831057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值