黑马程序员——枚举

本文深入探讨了Java枚举的定义与使用,包括枚举的基本语法、如何利用枚举实现接口和定义抽象方法等内容,并介绍了枚举与集合类如EnumSet和EnumMap的交互方式。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

package com.itheima.zqt;
enum Color{
	RED,GREEN,YELLOW;//定义枚举的三个类型
}
public class EnumDemo{
	public static void main(String[] args) {
		Color c = Color.RED;   //取得类型
		System.out.println(c);
		Color[] values = Color.values();    //获得全部枚举类型
		for (Color color : values) {   
			System.out.println(color);
			switch (color) {// enum 在switch中的使用 
			case RED:
				System.out.println("红色");
				break;
			case GREEN:
				System.out.println("绿色");
				break;
			case YELLOW:
				System.out.println("黄色");
				break;
			default:
				break;
			}
		}
	}
}

通过构造方法为属性赋值

package com.itheima.zqt;
enum Color{
	RED("红色"),GREEN("绿色"),YELLOW("黄色");
	private Color(String name) {
		this.setName(name);
	}
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
public class EnumDemo{
	public static void main(String[] args) {
		for (Color c :Color.values()) {
			System.out.println(c.ordinal()+"->"+c.name()+":"+c.getName()); //获得枚举常量的序号和名称
		}
		Color c = Enum.valueOf(Color.class,"GREEN");//通过反射的方式获得获得枚举类的对象
		System.out.println(c.name());
	}
}

enum关键字表示的是java.lang.Enum类型,使用enum 相当于定义一个类,此类默认继承java.lang.Enum,可以使用比较器和序列化操作

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {

在Enum类中的定义中已经实现好了Compareable接口,根据ordinal 属性排序。

enum Color{
	RED,GREEN,YELLOW;
}
public class EnumDemo{
	public static void main(String[] args) {
		Set<Color> t = new TreeSet<Color>();
		t.add(Color.YELLOW);
		t.add(Color.GREEN);
		t.add(Color.RED);
		Iterator<Color> iterator = t.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}
运行结果:

RED
GREEN
YELLOW

EnumMap 和EnumSet

EnumMap 是java.uitl.Map接口的一个特殊实现,他的key是一个枚举类型

enum Color{
	RED,GREEN,YELLOW;
}
public class EnumDemo{
	public static void main(String[] args) {
		Map<Color,String> desc = null;
		desc = new EnumMap<Color, String>(Color.class);
		desc.put(Color.RED, "红色");
		desc.put(Color.GREEN, "绿色");
		desc.put(Color.YELLOW, "黄色");
		System.out.println("输出全部枚举");
		for (Color c : Color.values()) {
			System.out.println(c.name()+"->"+desc.get(c));
		}
		System.out.println("输出全部键值");
		for (Color c : desc.keySet()) {
			System.out.print(c.name()+" ");
		}
		System.out.println();
		System.out.println("输出全部value");
		for (String string : desc.values()) {
			System.out.print(string+" ");
		}
	}
}
运行结果:

输出全部枚举
RED->红色
GREEN->绿色
YELLOW->黄色
输出全部键值
RED GREEN YELLOW 
输出全部value
红色 绿色 黄色 
EnumSet是Set接口的子类,内容不能重复,EnumSet不能使用new实例化,所以此类提供了静态方法

enum Color{
	RED,GREEN,YELLOW;
}
public class EnumDemo{
	public static void main(String[] args) {
		EnumSet<Color> es = null;
		es = EnumSet.allOf(Color.class); //将枚举的全部属性设置到EnumSet对象中
		print(es);
		es = EnumSet.of(Color.GREEN); //设置一个枚举的内容
		print(es);
		es = EnumSet.noneOf(Color.class);  // 只能加入Color类型的集合
		es.add(Color.GREEN);
		es.add(Color.YELLOW);
		print(es);
		EnumSet<Color> esNew = EnumSet.complementOf(es);//创建一个不包含指定元素的集合
		print(esNew);
		esNew = EnumSet.copyOf(es); //从已有集合中复制出内容
		print(esNew);
	}
	public static void print(EnumSet<Color> es){
		for (Color color : es) {
			System.out.println(color);
		}
		System.out.println("——————————————");
	}
}

枚举类实现一个接口

必须对枚举类中的每个对象分别实现接口中的方法

interface Print{
	public String getColor() ;
}
enum Color implements Print{
	RED{
		public String getColor(){
			return "红色" ;
		}
	},GREEN{
		public String getColor(){
			return "绿色" ;
		}
	},BLUE{
		public String getColor(){
			return "蓝色" ;
		}
	} ;
}
public class InterfaceEnumDemo{
	public static void main(String args[]){
		for(Color c:Color.values()){
			System.out.print(c.getColor() + "、") ;
		}
	}
};
在枚举类中定义抽象方法

每个枚举的对象分别实现抽象方法

enum Color {
	RED{
		public String getColor(){
			return "红色" ;
		}
	},GREEN{
		public String getColor(){
			return "绿色" ;
		}
	},BLUE{
		public String getColor(){
			return "蓝色" ;
		}
	} ;
	public abstract String getColor() ;
}
public class AbstractMethodEnum{
	public static void main(String args[]){
		for(Color c:Color.values()){
			System.out.print(c.getColor() + "、") ;
		}
	}
};



内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值