Java学习笔记——集合输出

对于操作而言,一共有四种输出形式:Iterator迭代输出、ListIterator双向迭代输出、Eumeration枚举输出、foreach输出.
文档地址:https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Iterator.html

1、Iterator迭代输出

  • 获取Iterator接口对象:public Iterator<T> iterator()
    Iterator接口里面有如下定义:
  • 判断是否有数据:public boolean hasNext()
  • 取出当前数据:public E next()
  • 删除:public default void remove()
    在之前使用的java.util.Scanner类就说Iterator接口的子类,此时类继承关系如下:
    在这里插入图片描述
    【范例】使用Iterator输出
package demo;

import java.util.Iterator;
import java.util.Set;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		//进行Set集合数据的保存,并且设置有重复的内容
		Set<String> all = Set.of("Hello","World","!!!","memeda");
		Iterator<String> iter = all.iterator();//实例化Iterator对象
		while(iter.hasNext()) {
			String str = iter.next();
			System.out.println(str);
		}
	}
}

对于Iterator中的remove()方法需要特别注意,如果不是必须不要使用。
实际上Collection方法中定义有数据的删除方法,但是如果在进行迭代输出的过程中如果使用了Collection中的remove()方法会导致迭代失败。
【采用Collection中的remove()方法删除】

package demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		//进行Set集合数据的保存,并且设置有重复的内容
		Set<String> all = new HashSet<String>();
		all.add("Hello");
		all.add("World");
		all.add("!!!!");
		all.add("么么么哒");
		Iterator<String> iter = all.iterator();//实例化Iterator对象
		while(iter.hasNext()) {
			String str = iter.next();
			if("World".equals(str)) {
				all.remove("World");
			}
			System.out.println(str);
		}
	}
}

会报错Exception in thread “main” java.util.ConcurrentModificationException。
此时无法进行数据的删除处理操作,那么此时就只能够利用Iterator接口中的remove()方法进行删除。

【范例】使用Iterator接口删除方法

package demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		//进行Set集合数据的保存,并且设置有重复的内容
		Set<String> all = new HashSet<String>();
		all.add("Hello");
		all.add("World");
		all.add("!!!!");
		all.add("么么么哒");
		Iterator<String> iter = all.iterator();//实例化Iterator对象
		while(iter.hasNext()) {
			String str = iter.next();
			if("World".equals(str)) {
				iter.remove();//删除当前的数据
			}
//			System.out.println(str);
		}
		all.forEach(System.out::println);
	}
}
Hello
!!!!
么么么哒

Collection.remove()与Iterator.remove()的区别:

  • 在进行迭代输出的时候如果使用了Collection.remove()则会造成并发更新异常,导致程序删除出错,而此时只能够利用Iterator.remove()方法实现正常的删除处理。

2、ListIterator输出

使用Iterator进行的迭代输出操作有一个特点:只允许由前向后实现输出,而如果要实现双向输出操作处理,则必须依靠ListIterator接口来实现。
在这里插入图片描述
ListIterator接口里面定义有如下的操作放啊:

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

【范例】实现双向迭代

package demo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		List<String> all = new ArrayList<String>();
		all.add("Hello");
		all.add("world");
		all.add("!!!!");
		all.add("dingding");
		ListIterator<String> iter = all.listIterator();
		System.out.println("由前向后输出:");
		while(iter.hasNext()) {
			System.out.print(iter.next()+"、");
		}
		System.out.println("\n由后向前输出");
		while(iter.hasPrevious()) {
			System.out.print(iter.previous()+"、");
		}
	}
}

由前向后输出:
Hello、world、!!!!、dingding、
由后向前输出
dingding、!!!!、world、Hello、

如果要想实现由后向前的遍历,那么首先要实现的时由前向后实现遍历处理。

Enumeration输出

Enumeration只为Vector一个类服务,如果要想获取Enumeration接口对象,就必须依靠Vector类提供的方法:

  • 获取Enumeration:public Enumeration<E> elements();
    在Enumeration接口之中定义有两个接口方法:
  • 判断是否有下一个元素:public boolean hasMoreElements();
  • 获取当前元素:public E nextElement()

【范例】使用Enumeration进行输出

package demo;
import java.util.Enumeration;
import java.util.Vector;
public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Vector<String> all = new Vector<String>();
		all.add("Hello");
		all.add("world");
		all.add("!!!!");
		all.add("dingding");
		Enumeration<String> enu = all.elements();
		while (enu.hasMoreElements()) {
			String str = enu.nextElement();
			System.out.println(str +"、");
		}	
	}
}
Hello、
world、
!!!!、
dingding、

参考地址:https://edu.aliyun.com/lesson_1012_9083#_9083

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值