java数据结构(一)------枚举(Enumeration)

本文介绍了Java中的Enumeration接口及其使用,包括在Vector和Properties等类中的应用。枚举常用于实现单例模式,能防止序列化后的对象不一致和反射攻击。示例展示了如何遍历Vector中的元素,并讨论了枚举作为单例模式实现的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

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

实例

以下实例演示了Enumeration的使用:

实例

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

 

 

使用枚举实现单例的好处:

1.避免在对象序列化后得出的对象不是同一个对象

序列化的原理是:任何一个readObject方法,不管是显式的还是默认的,它都会返回一个新建的实例,这个新建的实例不同于该类初始化时创建的实例

 

2.避免反射攻击

常规的单例模式(例如:饿汉式,懒汉式,双重锁)在反射攻击下都会失效,而使用枚举可以有效避免反射攻击

单例模式实现的最佳方式:

示例:

public enum Singleton {
    INSTANCE;
    public Singleton getInstance(){
        return INSTANCE;
    }
}

 

 

 

参考:

枚举有关资料

https://www.runoob.com/java/java-enumeration-interface.html

枚举的好处

https://www.cnblogs.com/chiclee/p/9097772.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值