用法六:枚举集合的使用
package meiju;
import java.util.EnumMap;
import java.util.EnumSet;
/**
*
* @ClassName: EnumLIghtTest
* @Description: 枚举的遍历
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:41:13
*
*/
public class EnumLIghtTest {
//1.定义枚举类型
public enum Light{
//2.利用构造参数传参
RED(1),GREEN(3),YELLOW(2);
//定义私有变量
private int nCode;
// 构造函数,枚举类型只能为私用
private Light(int _nCode){
this.nCode = _nCode;
}
public String toString(){
return String.valueOf(this.nCode);
}
}
/**
* @param args
*/
public static void main(String[] args) {
//1.遍历枚举类型
System.out.println("演示枚举类型的遍历……");
testTranversalEnum();
//2.EnumMap对象的使用
System.out.println("演示EnumMap对象的使用和遍历……");
testEnumMap();
//3.演示EnumSet的使用
System.out.println("演示EnumSet对象的使用和遍历……");
testEnumSet();
}
/**
* 演示枚举类型的遍历
*/
private static void testTranversalEnum(){
Light[] allLight = Light.values();
for(Light aLight : allLight){
System.out.println("当前灯name:"+aLight.name());
System.out.println("当前灯ordinal:"+aLight.ordinal());
System.out.println("当前灯:"+aLight);
}
}
/**
* 演示EnumMap的使用,EnumMao跟HashMap的使用差不多,只是key值是枚举类型
*/
private static void testEnumMap(){
//1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
EnumMap
currEnumMap = new EnumMap
(Light.class); currEnumMap.put(Light.RED, "红灯"); currEnumMap.put(Light.GREEN, "绿灯"); currEnumMap.put(Light.YELLOW, "黄灯"); for(Light aLight :Light.values()){ System.out.println("[key="+aLight.name()+",value=" +currEnumMap.get(aLight)+"]"); } } /** * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容 * * 可以使用allOf方法 */ private static void testEnumSet(){ EnumSet
currEnumSet = EnumSet.allOf(Light.class); for(Light aLightSetElement :currEnumSet){ System.out.println("当前EnumSet中数据为:"+aLightSetElement); } } }
用法七:用接口组织枚举
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
枚举相对于final static来说,枚举可以减少变量的定义,在switch中的使用有利于代码的执行效率,同时枚举可以自定义内置方法,还有就是枚举可以使用遍历方法。虽然枚举有一些优势但是枚举不是继承。
参考:
http://www.iteye.com/topic/1116193
http://blog.csdn.net/p106786860/article/details/11516269