`
racingbird
  • 浏览: 23687 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

枚举类Enum,EnumSet,EnumMap

 
阅读更多

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;
 


 

分享到:
评论

相关推荐

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    总的来说,Java中的枚举是一种强大的特性,提供了类型安全的常量集合,并结合`EnumSet`和`EnumMap`这两个工具类,可以在处理枚举数据时实现高效的编程。理解并善用这些概念,将有助于编写更加可靠和高效的Java代码。

    Java中的枚举类型Enum示例源代码

    每个枚举常量都是`Color`类的一个实例,它们自动地继承自`java.lang.Enum`类。 枚举类型的常量可以直接通过名字来引用,无需创建实例,例如: ```java Color color = Color.RED; ``` 枚举类型可以有构造函数,但...

    java枚举类型enum的使用

    除了基本的定义和使用之外,Java 还提供了专门用于枚举类型的容器类,如 `EnumMap` 和 `EnumSet`。 ##### 4.1 EnumMap 使用示例 `EnumMap` 是一个专为枚举类型设计的映射容器,其键必须是枚举类型。例如: ```...

    Java枚举类型enum的详解及使用

    EnumMap 和 EnumSet 是 Java 中的两个特殊的集合类,它们都是专门用于枚举类型的集合操作的。例如,我们可以使用 EnumMap 来保存枚举类型的映射关系: ```java EnumMap, String&gt; map = new EnumMap(Light.class); ...

    enum枚举类的一些代码demo

    Java提供了`EnumSet`和`EnumMap`两种专为枚举设计的集合类。`EnumSet`是一个高效的集合,用于存储枚举类型,而`EnumMap`则是一个键为枚举类型的高效映射表: ```java EnumSet&lt;WeekDay&gt; weekendDays = EnumSet.of...

    JAVA高级编程中Enum枚举

    在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...

    Java期末复习——枚举与反射机制

    Java还提供了专门针对枚举的集合类:`EnumMap`和`EnumSet`。`EnumMap`是一个映射,其中的键是枚举类型,而`EnumSet`则是一个高效、不可变的集合,只包含枚举类型中的元素。 二、反射机制 反射机制允许在运行时检查...

    javaenum(枚举)使用详解+总结.pdf

    枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类,但可以实现多个接口。下面我们将深入探讨enum的使用方法、特性以及常见的操作。 1. **...

    一文弄懂EnumMap和EnumSet

    在Java编程中,当我们需要处理特定枚举类型(Enum)作为键(Key)的映射关系时,EnumMap和EnumSet成为两种非常实用的工具类。它们是Java集合框架中专门为枚举类型设计的高效容器,提供了比普通HashMap和HashSet更好...

    简单总结java枚举类型

    虽然枚举不能直接继承其他类,但它们默认继承了`java.lang.Enum`类,并且可以实现接口。这使得枚举具有更多的可扩展性。 5. 枚举遍历: 可以使用`values()`方法获取枚举类型的所有实例,形成一个数组,从而方便...

    java枚举ppt和详细代码

    枚举类可以继承`EnumSet`或`EnumMap`,这两个类提供了针对枚举的优化操作。例如: ```java EnumSet&lt;Color&gt; colors = EnumSet.allOf(Color.class); ``` 通过学习上述知识点,你可以更好地理解和运用Java枚举,...

    java 枚举学习心得

    同时,枚举还支持枚举常量之间的自然排序,可以与其他集合框架结合使用,如`EnumSet`和`EnumMap`。 总的来说,学习Java枚举不仅能够帮助我们编写更清晰、更安全的代码,还能提高程序设计的效率。通过深入理解枚举的...

    Java开发实战从入门到精通视频教程下载第14章 枚举.zip

    首先,枚举类是Java中的单例类,它自动继承了`java.lang.Enum`类,并且不能被实例化。创建枚举类型的语法如下: ```java public enum Color { RED, GREEN, BLUE } ``` 这里的`Color`是枚举类型的名字,`RED`, `...

    java枚举的一个实例

    枚举在集合框架中也有广泛应用,如`java.util.EnumSet`和`java.util.EnumMap`,它们提供了针对枚举类型优化的高效集合实现。 总的来说,Java枚举提供了一种强类型、安全且易于使用的机制来表示固定集合的值。通过...

    Java 常用武器库之枚举1

    - `EnumSet`和`EnumMap`是专门为枚举设计的高效集合类,它们提供了针对枚举类型优化的操作。 枚举在Java中的应用广泛,尤其是在设计模式中,如工厂模式、策略模式等。使用枚举可以增强代码的可读性和可维护性,...

    jdk6学习笔记(17,18,19,20,21)

    JDK 6对枚举类型进行了增强,支持枚举常量之间的比较,可以实现Comparable接口,还引入了枚举套接字(EnumSet)和枚举映射表(EnumMap),这两个集合类专门用于枚举类型的存储,提供了高效且安全的操作。...

    Java的枚举类型使用方法详解

    - **枚举集合**:所有枚举实例都自动继承了`EnumSet`和`EnumMap`等集合类,提供了高效的操作。 - **序列化支持**:枚举类型支持Java的序列化机制。 3. 应用场景: 枚举类型在很多场景下都非常实用,例如: - **控制...

    DZ6_Enum

    Java的Collections框架提供了`EnumSet`和`EnumMap`这两个专用的集合类,它们针对枚举类型优化了性能。 7. 枚举单例模式: 枚举可以用来实现线程安全的单例模式,因为枚举的实例化是在类加载时自动完成的,且保证...

    高级编程-java实验报告.docx

    实验报告主要涵盖了Java编程中的高级主题,特别是关于集合框架、映射和枚举类型的应用...同时,实验也涵盖了枚举类型的使用,以及EnumSet和EnumMap的基础应用。通过实际操作,学生能更好地理解和掌握这些高级编程概念。

    java中的枚举类型详细介绍

    枚举可以与集合框架结合使用,如放入`EnumSet`或`EnumMap`中,提供高效且类型安全的存储。 9. **枚举常量间的关系**: 如果需要在枚举常量之间建立关系,可以使用`enum`内部的枚举常量来实现,或者定义方法来处理...

Global site tag (gtag.js) - Google Analytics