Comparator用于Collections.sort

本文详细介绍了Java中使用Comparator接口进行对象列表排序的方法,包括实现细节、compareTo方法的用法以及实体类的设计。通过实例展示了如何自定义排序逻辑,并解析了compareTo与compareToIgnoreCase的区别。

在一个应用管理的代码中遇到这个方法,用于List的排序,升序或者降序

Comparator是接口类,继承之后需要实现里面的方法

static class MyCom implements Comparator<MyData> {

		@Override
		public int compare(MyData o1, MyData o2) {
			int res = 0;
			int data1 = o1.getId();
			int data2 = o2.getId();
			String name1 = o1.getName();
			String name2 = o2.getName();

			res = data1 - data2;

			if (res == 0) {
				res = name2.compareTo(name1);
			}
			return res;
		}

	}

也可以写成
			if (data1 > data2) {
				res = 1;
			} else if (data1 < data2) {
				res = -1;
			}

关于三个返回值:1、-1、0

我理解成o1和o2比较时,根据比较的关系式得到的排放顺序,1表示o1在后面,-1表示o1在前面,0表示按原有顺序

额外的,compareTo是从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。compareToIgnoreCase比较则会不计大小写


实体类

	static class MyData {
		int id;
		String name;

		public MyData(int id, String name) {
			super();
			this.id = id;
			this.name = name;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

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

		@Override
		public String toString() {
			return "id=" + id + ";" + "name=" + name;
		}

	}

操作代码
	List<MyData> list = new ArrayList<hasda.MyData>();

		MyData data0 = new MyData(1, "a");
		list.add(data0);
		MyData data1 = new MyData(3, "a");
		list.add(data1);
		MyData data2 = new MyData(2, "d");
		list.add(data2);
		MyData data3 = new MyData(1, "z");
		list.add(data3);

		Collections.sort(list, new MyCom());
		System.out.println(list.toString());
	}

结果为[id=1;name=z, id=1;name=a, id=2;name=d, id=3;name=a]

如果将res = data1 - data2;改成res = data2 - data1; 结果为[id=3;name=a, id=2;name=d, id=1;name=z, id=1;name=a]





内容概要:本文系统介绍了算术优化算法(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、付费专栏及课程。

余额充值