枚举类型Enum

包java.dataStructure中,文件名Enum_demo.java

在JDK5中引入了一个新的关键字——enum,可以直接定义枚举类型

在申明枚举类的时候,也可以申明属性、方法和构造函数,但枚举类的构造函数必须为私有的,不然就能new出枚举类

取出一个枚举内容

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED,GREEN,BLUE;
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Color c = Color.BLUE;
		System.out.println(c);
	}

}

枚举类型的数据也可以使用“枚举.values()”的形式,将全部的枚举类型变为对喜爱数组的形式,之后再直接使用foreach进行输出

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED,GREEN,BLUE;
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(Color c:Color.values()){
			System.out.println(c);
		}
	}

}

使用switch进行判断

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED,GREEN,BLUE;
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(Color c:Color.values()){
			print(c);
		}
	}
	
	public static void print(Color color){
		switch(color){
			case RED:{
				System.out.println("红色");
				break;
			}
			case GREEN:{
				System.out.println("绿色");
				break;
			}
			case BLUE:{
				System.out.println("蓝色");
				break;
			}
			default:{
				System.out.println("其他颜色");
				break;
			}
		}
	}

}

使用name()和ordinal()方法取得名称和编号

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED,GREEN,BLUE;
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(Color c:Color.values()){
			System.out.println(c.ordinal()+"-->"+c.name());
		}
	}

}

通过构造方法为属性赋值

通过把构造方法私有,使得不能new 一个新的Color对象,只能使用RED("红色"),GREEN("绿色"),BLUE("蓝色")三个类型

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED("红色"),GREEN("绿色"),BLUE("蓝色");		//定义枚举的3个类型,“红色”对应String name
	
	private Color(String name){			//定义私有构造方法
		this.setName(name);
	}
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(Color c:Color.values()){
			System.out.println(c.ordinal()+"-->"+c.name()+c.getName());
		}
	}

}

通过setter()方法为属性赋值

枚举比较器

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum Color{
	RED("红色"),GREEN("绿色"),BLUE("蓝色");		//定义枚举的3个类型
	
	private Color(String name){			//定义构造方法
		this.setName(name);
	}
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

//主类
//Function        : 	Enum_demo;
public class Enum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		Set<Color> t = new TreeSet<Color>();
		t.add(Color.BLUE);
		t.add(Color.GREEN);
		t.add(Color.RED);
		Iterator<Color> iter = t.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next()+"、");
		}
	}


}

EnumMap

EnumMap是Map接口的子类,所以本身还是以Map的形式进行操作,即Key--Value,

如果要使用EnumMap,则首先要创建EnumMap的对象,在创建对象的时候必须指定要操作的枚举类型

import java.util.EnumMap;
import java.util.Map;

//=================================================
// File Name       :	Enum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	Enum_demo;
public class EnumMap_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Map<Color,String> desc = null;									//定义一个Map对象
		desc = new EnumMap<Color,String>(Color.class);	//实例化EnumMap
		desc.put(Color.BLUE, "蓝色");
		desc.put(Color.RED, "红色");
		desc.put(Color.GREEN,"绿色");
		
		for(Color c:Color.values()){				//取得全部的枚举
			System.out.println(c.name()+"-->"+c.getName());
		}
		
		for(Color c:desc.keySet()){				//取得全部的Key
			System.out.println(c.name()+"、");
		}
		
		for(String c:desc.values()){				//取得全部的值
			System.out.println(c+"、");
		}
	}

}

EnumSet

EnumSet是Set接口的子类,所以里面的内容是无法重复的。

使用EnumSet时不能直接使用关键字new为其进行实例化,所以在此类中提供了很多的静态方法

EnumSet---将全部的集合设置到EnumSet集合中

import java.util.EnumSet;

//=================================================
// File Name       :	EnumSet_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color_{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	EnumSet_demo;
public class EnumSet_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		EnumSet<Color> es = null;				//声明一个EnumSet对象
		es = EnumSet.allOf(Color.class);		//将枚举的全部类型设置到EnumSet对象中
		
		print(es);
	}
	
	public static void print(EnumSet<Color> temp){		//专门的输出操作
		for(Color c:temp){															//循环输出EnumSet中的内容
			System.out.println(c+"、");
		}
	}

}

只设置一个枚举的类型到集合中

使用EnumSet提供的static方法of(),将一个枚举中的一个内容设置到EnumSet集合中

import java.util.EnumSet;

//=================================================
// File Name       :	EnumSet_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color_{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	EnumSet_demo;
public class EnumSet_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		EnumSet<Color> es = null;				//声明一个EnumSet对象
		es = EnumSet.of(Color.BLUE);			//设置一个枚举的内容
		
		print(es);
	}
	
	public static void print(EnumSet<Color> temp){		//专门的输出操作
		for(Color c:temp){															//循环输出EnumSet中的内容
			System.out.println(c+"、");
		}
	}

}

创建只能放入指定枚举类型的集合

使用EnumSet提供的static方法noneOf(),将集合设置成只能增加Color类型的集合,但是并不设置任何的内容到集合中

import java.util.EnumSet;

//=================================================
// File Name       :	EnumSet_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color_{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	EnumSet_demo;
public class EnumSet_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		EnumSet<Color> es = null;				//声明一个EnumSet对象
		
		es = EnumSet.noneOf(Color.class);			//创建一个可以加入Color类型的对象
		es.add(Color.BLUE);
		es.add(Color.RED);
		
		print(es);
	}
	
	public static void print(EnumSet<Color> temp){		//专门的输出操作
		for(Color c:temp){															//循环输出EnumSet中的内容
			System.out.println(c+"、");
		}
	}

}

创建不包含指定元素的集合

import java.util.EnumSet;

//=================================================
// File Name       :	EnumSet_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color_{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	EnumSet_demo;
public class EnumSet_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		EnumSet<Color> esOld = null;				//声明一个EnumSet对象
		EnumSet<Color> esNew = null;				//声明一个EnumSet对象
		esOld = EnumSet.noneOf(Color.class);			//创建一个可以加入Color类型的对象
		esOld.add(Color.BLUE);
		esOld.add(Color.RED);
		esNew = EnumSet.complementOf(esOld);		//创建一个不包含指定元素的集合
		print(esNew);
	}
	
	public static void print(EnumSet<Color> temp){		//专门的输出操作
		for(Color c:temp){															//循环输出EnumSet中的内容
			System.out.println(c+"、");
		}
	}

}

复制已有的内容

import java.util.EnumSet;

//=================================================
// File Name       :	EnumSet_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 枚举类名:Color
// 属性:
// 方法:
enum color_{
	RED,GREEN,BLUE;		//定义枚举的3个类型
}	


//主类
//Function        : 	EnumSet_demo;
public class EnumSet_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		EnumSet<Color> esOld = null;				//声明一个EnumSet对象
		EnumSet<Color> esNew = null;				//声明一个EnumSet对象
		esOld = EnumSet.noneOf(Color.class);			//创建一个可以加入Color类型的对象
		esOld.add(Color.BLUE);
		esOld.add(Color.RED);

		esNew = EnumSet.copyOf(esOld);					//从已有的集合中复制出内容
		print(esNew);
	}
	
	public static void print(EnumSet<Color> temp){		//专门的输出操作
		for(Color c:temp){															//循环输出EnumSet中的内容
			System.out.println(c+"、");
		}
	}

}

让枚举类实现一个接口

在接口中定义了一个getColor()方法,枚举类在实现此接口之后,就必须对枚举类中的每个对象分别实现接口中的getColor()方法

//=================================================
// File Name       :	InterfaceEnum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 接口名:Print
// 属性:
// 方法:
interface Print_{									//定义Print方法
	public String getColor();				//定义抽象方法
}

//枚举类名:Color
//属性:
//方法:
enum color_1 implements Print_{				//枚举类实现接口
	RED{															//枚举对象实现抽象方法
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "红色";
		}
	},
	BLUE{
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "蓝色";
		}
	},
	GREEN{
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "绿色";
		}
	};
}	


//主类
//Function        : 	InterfaceEnum_demo;
public class InterfaceEnum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(color_1 c:color_1.values()){							//循环输出EnumSet中的内容
			System.out.println(c.getColor()+"、");
		}
	}

}

在枚举类中定义抽象方法

//=================================================
// File Name       :	InterfaceEnum_demo
//------------------------------------------------------------------------------
// Author          :	Common

// 接口名:Print
// 属性:
// 方法:
interface Print_{									//定义Print方法
	public String getColor();				//定义抽象方法
}

//枚举类名:Color
//属性:
//方法:
//enum color_1 implements Print_{				//枚举类实现接口
//	RED{															//枚举对象实现抽象方法
//		@Override
//		public String getColor() {
//			// TODO 自动生成的方法存根
//			return "红色";
//		}
//	},
//	BLUE{
//		@Override
//		public String getColor() {
//			// TODO 自动生成的方法存根
//			return "蓝色";
//		}
//	},
//	GREEN{
//		@Override
//		public String getColor() {
//			// TODO 自动生成的方法存根
//			return "绿色";
//		}
//	};
//}	

enum color_1{				//枚举类实现接口
	RED{															//枚举对象实现抽象方法
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "红色";
		}
	},
	BLUE{
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "蓝色";
		}
	},
	GREEN{
		@Override
		public String getColor() {
			// TODO 自动生成的方法存根
			return "绿色";
		}
	};
	public abstract String getColor();			//定义抽象方法
}	


//主类
//Function        : 	InterfaceEnum_demo;
public class InterfaceEnum_demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		for(color_1 c:color_1.values()){							//循环输出EnumSet中的内容
			System.out.println(c.getColor()+"、");
		}
	}

}
原文地址:https://www.cnblogs.com/tonglin0325/p/5290869.html