EnumSet与HashSet相比,非常快。
public enum AlalmPoints{ STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2; } public class EnumSets { EnumSet<AlarmPoints> points = EnumSet.noneOf(AlarmPoint.class); //Enmpty set points.add(STAIR1); }
EnumMap ,它要求其中的键(key)必须来自已个enum.
由于enum本身的限制,所以EnumMap在内部可由数组实现。
因此EnumMap的速度很快。不过只能将enum的实例作为键
来调用put()方法,如果key不存在,则对应null.
其他的操作与使用一般的Map差不多。
interface Command { void actioin(); } public class EnumMaps { public static void main(String[] args){ EnumMap<AlarmPoints, Command> em = new EnumMap<AlarmPoints, Command>(AlarmPoints.class); em.put(KITCHEN, new Comman(){ public void actioin(){ System.out.println("Kitchen fire!"); } }); em.put(BATHROOM, new Comman(){ public void actioin(){ System.out.println("Bathroom fire!"); } }); for(Map.Entry<AlarmPoints, Command> e : em.entrySet()){ system.out.println(e.getKey()+": "); e.getValue().action(); } try{ // If there;s no value for particular key; em.get(UTILITY).action(); //AlarmPoints 没有 UTILITY }catch(Exception e){ ... } } }
常量相关方法
enum允许为enum实例编写方法, 从而为每个enum实例
赋予各自不同的行为。 要实现常量的相关的方法,
你需要为enum定义一个或多个abstract方法,
然后为每个enum实例实现该抽象方法。
public enum ConstantSpecificMethod{ DATE_TIME{ String getInfo(){ return DateFormat.getDateInstance().format(new Date()); } }, CLASSPATH{ String getInfo(){ return System.getenv("CLASSPATH"); } }, VERSION{ String getInfo(){ return Syste.getProperty("java.version"); } }; abstract String getInfo(); public static void main(String[] args){ for(ConstantSpecificMethod csm : values()) System.out.println(csm.getInfo()); } } 通过相应的enum实例,我们可以调用其上的方法。 这通常也称为表驱动的代码 在上面的例子中, enum实例视乎被当做"超类" ConstantSpecificMethod来使用, 在调用getInfo()方法时,体现出多态的行为。 然而, enum实例与类的相似之处也仅限于此。 我们并不能真的将enum实例作为一个类型来使用 enum LikeClass{ WINKEN{void behavior(){sysout("B1")}}, BLINKEN{void behavior(){sysout("B2")}}, abstract void behavior(); } public class NotClasses { // void f1(LikeClass.WINKEN insatnce){} //OPE } // Compiled form "NotClasses.java" abstract class LikeClasses extends java.lang.Enum { public static final LikeClasses WINKEN; public static final LikeClasses BLINKEN; public static final LikeClasses NOD; 在方法f1()中,编译器不允许我们将以个enum实例当做class类型, 分析下编译器生成的代码,就知道每个enum元素都是一个LikeClasses 类型的static final实例。 同时,由于他们是 static 实例,无法访问外部类的非static元素或 方法,所以对于内部的enum的实例而言,行为跟一般的内部类并不相同。 public class CarWash { public enum Cycle{ UNDERBODY{ void action(){ System.out.println("underbody");} }, WHEELWASH{ void action(){ System.out.println("Washing the wheels");} }; abstract void action(); } EnumSet<Cycle> cycles = EnumSet.of(Cycle.UNDERBODY, Cycle.WHEELWASH); public void washCar(){ for(Cycle c : cycles) c.action(); } public static void main(String[] args){ CarWash wash = new CarWash(); System.out.println(wash); wash.washCar(); wash.cycles.add(Cycle.UNDERBODY); } }
与使用匿名内部类相比, 定义常量相关方法的语法更高效,简洁。
这个例子展示 EnumSet一些特性,因为她是一个恶集合,所以对一个
元素而言,只能出现一次。想EnumSet添加的enum实例的顺序并不重要,
因为其输出的次序决定于enum实例定义时的次序。
除了实现abstract方法外, 还可以覆盖常量的相关方法
public enum OverrideConstantSpecific{ NUT, BOLT, WASHER{ void f(){print("Overriden method");} }; void f(){print("default method");} public static void mian(String[] args){ for(OverrideConstantSpecific osc : values()){ print(osc+":"); ocs.f(); } } } //output NUT : default method; BOLT : default method; WASHER : Overriden method;
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 684class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1031package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 658class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 738public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 828使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1902直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1383多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 922public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1178package enumerated; impor ... -
枚举类enum
2012-02-03 15:00 904一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 634Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 981Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 787{ public static void main( ... -
散列HashCode
2012-02-01 14:04 704散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 590Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 308如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 381这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 398Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 342一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 637不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
总的来说,Java中的枚举是一种强大的特性,提供了类型安全的常量集合,并结合`EnumSet`和`EnumMap`这两个工具类,可以在处理枚举数据时实现高效的编程。理解并善用这些概念,将有助于编写更加可靠和高效的Java代码。
每个枚举常量都是`Color`类的一个实例,它们自动地继承自`java.lang.Enum`类。 枚举类型的常量可以直接通过名字来引用,无需创建实例,例如: ```java Color color = Color.RED; ``` 枚举类型可以有构造函数,但...
除了基本的定义和使用之外,Java 还提供了专门用于枚举类型的容器类,如 `EnumMap` 和 `EnumSet`。 ##### 4.1 EnumMap 使用示例 `EnumMap` 是一个专为枚举类型设计的映射容器,其键必须是枚举类型。例如: ```...
EnumMap 和 EnumSet 是 Java 中的两个特殊的集合类,它们都是专门用于枚举类型的集合操作的。例如,我们可以使用 EnumMap 来保存枚举类型的映射关系: ```java EnumMap, String> map = new EnumMap(Light.class); ...
Java提供了`EnumSet`和`EnumMap`两种专为枚举设计的集合类。`EnumSet`是一个高效的集合,用于存储枚举类型,而`EnumMap`则是一个键为枚举类型的高效映射表: ```java EnumSet<WeekDay> weekendDays = EnumSet.of...
在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...
Java还提供了专门针对枚举的集合类:`EnumMap`和`EnumSet`。`EnumMap`是一个映射,其中的键是枚举类型,而`EnumSet`则是一个高效、不可变的集合,只包含枚举类型中的元素。 二、反射机制 反射机制允许在运行时检查...
枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类,但可以实现多个接口。下面我们将深入探讨enum的使用方法、特性以及常见的操作。 1. **...
在Java编程中,当我们需要处理特定枚举类型(Enum)作为键(Key)的映射关系时,EnumMap和EnumSet成为两种非常实用的工具类。它们是Java集合框架中专门为枚举类型设计的高效容器,提供了比普通HashMap和HashSet更好...
虽然枚举不能直接继承其他类,但它们默认继承了`java.lang.Enum`类,并且可以实现接口。这使得枚举具有更多的可扩展性。 5. 枚举遍历: 可以使用`values()`方法获取枚举类型的所有实例,形成一个数组,从而方便...
枚举类可以继承`EnumSet`或`EnumMap`,这两个类提供了针对枚举的优化操作。例如: ```java EnumSet<Color> colors = EnumSet.allOf(Color.class); ``` 通过学习上述知识点,你可以更好地理解和运用Java枚举,...
同时,枚举还支持枚举常量之间的自然排序,可以与其他集合框架结合使用,如`EnumSet`和`EnumMap`。 总的来说,学习Java枚举不仅能够帮助我们编写更清晰、更安全的代码,还能提高程序设计的效率。通过深入理解枚举的...
首先,枚举类是Java中的单例类,它自动继承了`java.lang.Enum`类,并且不能被实例化。创建枚举类型的语法如下: ```java public enum Color { RED, GREEN, BLUE } ``` 这里的`Color`是枚举类型的名字,`RED`, `...
枚举在集合框架中也有广泛应用,如`java.util.EnumSet`和`java.util.EnumMap`,它们提供了针对枚举类型优化的高效集合实现。 总的来说,Java枚举提供了一种强类型、安全且易于使用的机制来表示固定集合的值。通过...
- `EnumSet`和`EnumMap`是专门为枚举设计的高效集合类,它们提供了针对枚举类型优化的操作。 枚举在Java中的应用广泛,尤其是在设计模式中,如工厂模式、策略模式等。使用枚举可以增强代码的可读性和可维护性,...
JDK 6对枚举类型进行了增强,支持枚举常量之间的比较,可以实现Comparable接口,还引入了枚举套接字(EnumSet)和枚举映射表(EnumMap),这两个集合类专门用于枚举类型的存储,提供了高效且安全的操作。...
- **枚举集合**:所有枚举实例都自动继承了`EnumSet`和`EnumMap`等集合类,提供了高效的操作。 - **序列化支持**:枚举类型支持Java的序列化机制。 3. 应用场景: 枚举类型在很多场景下都非常实用,例如: - **控制...
Java的Collections框架提供了`EnumSet`和`EnumMap`这两个专用的集合类,它们针对枚举类型优化了性能。 7. 枚举单例模式: 枚举可以用来实现线程安全的单例模式,因为枚举的实例化是在类加载时自动完成的,且保证...
实验报告主要涵盖了Java编程中的高级主题,特别是关于集合框架、映射和枚举类型的应用...同时,实验也涵盖了枚举类型的使用,以及EnumSet和EnumMap的基础应用。通过实际操作,学生能更好地理解和掌握这些高级编程概念。
枚举可以与集合框架结合使用,如放入`EnumSet`或`EnumMap`中,提供高效且类型安全的存储。 9. **枚举常量间的关系**: 如果需要在枚举常量之间建立关系,可以使用`enum`内部的枚举常量来实现,或者定义方法来处理...