Enumeration接口和Iterator接口学习笔记


前言

每日一题,学习笔记

Enumeration接口和Iterator接口的区别有哪些?


一、Enumeration接口是什么?

Java Enumeration接口

Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。

这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。 下表总结了一些Enumeration声明的方法:

  • boolean hasMoreElements( )
    测试此枚举是否包含更多的元素。
  • Object nextElement( )
    如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

实例

import java.util.Vector;
import java.util.Enumeration;
 
public class EnumerationTester {
 
   public static void main(String args[]) {
      Enumeration<String> days;
      Vector<String> dayNames = new Vector<String>();
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      while (days.hasMoreElements()){
         System.out.println(days.nextElement()); 
      }
   }
}

结果如下:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

二、Iterator()接口是什么?

在程序开发过程中,我们经常需要遍历集合中的所有元素,但是因为有的集合含有索引有的集合没有索引,无法都通过索引遍历出集合中的元素。为了解决这种问题,我们使用JDK专门提供的一个接口java.util.Iterator。Iterator接口也是Java众多集合中的一员,但是它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问Collection中的元素,因此Iterator对象也被称为迭代器

什么是迭代?

即Collection集合元素的通用获取方式。取出元素之前要先判断集合中有没有元素,如果有就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中所有元素全部取出。这种取出方式的专业属于叫做迭代

Iterator接口中常用的方法

  • boolean hasNext()方法
    方法描述:如果仍有元素可以迭代,则返回true
    作用:判断集合中还有没有下一个元素,有就返回true,没有就返回false
  • E next()方法
    方法描述:返回迭代的下一个元素
    作用:取出集合中的下一个元素

迭代器的使用步骤

  • 使用集合中的方法iterotor()获取迭代器的实现类对象,使用Iterator接口接收(这是一个多态的写法)
  • 使用Iterator接口中的方法hasNext判断还有没有下一个元素
  • 使用Iterotor接口中的方法next取出集合中的下一个元素

实例

public static void main(String[] args){
// 创建一个ArrayList集合,向上转型为Collection接口
	Collection<String> coll = new ArrayList<>();
// 向coll集合中添加元素
	coll.add("波普");
	coll.add("卡鲁索");
	coll.add("格林");
	coll.add("詹姆斯");
	coll.add("戴维斯");
// Coolection类中的iterator方法返回的是Iterator类型的对象
	Iterator<String> it = coll.iterator();
	// 第一种遍历方法
	while(it.hasNext()){// .hasNext用来判断集合中是否还含有元素
		String e = it.next();// .next方法用于取出集合中的元素
		System.out.println(e);
	}
	// 第二种遍历方法,步进表达式不用写
	for(Iterator<String> it2 = coll.iterator();it2.hasNext();){
		String e = it.next();
		System.out.println(e);
	}
}

总结

Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值