Java学习:Comparator和Comparable

news/2024/12/1 0:37:02/

一.Comparator的使用

1.Arrays.sort

        给基本类型的数组进行排序的方法,默认是实现升序,也可以通过方法写匿名类自定义实现升降序排序。

代码:

Arrays.sort(arr,new Comparator<Integer>(){@Overridepublic int compare(Integer o1, Integer o2) {if(o1<o2)return 1;else return -1;}});

2.Collections.sort

        给List类的可变长数组进行排序的方法,默认是实现升序,也可以通过方法覆写Comparator接口的compara自定义实现升降序排序。

代码:

 Collections.sort(st,new Comparator<Integer>() {public int compare(Integer o1, Integer o2) {if(o1<o2)return 1;else return -1;}
});

二、Comparable的使用

        用于自定义类继承该接口,该类的实例即可放入TreeSet中实现自定义排序。

代码:

//main方法
import rpg.Margicion;
import java.util.HashSet;
import java.util.TreeSet;public class Main {public static void main(String[] args)  {HashSet<Margicion> s=new HashSet<>();Margicion r=new Margicion("b", 15, 20);Margicion d=new Margicion("a", 15, 20);TreeSet<Margicion> e=new TreeSet<>();e.add(r);e.add(d);for (Margicion margicion : e) {System.out.println(margicion.toString());}}
}
//自定义类需要继承Comparable接口,才能使用TreeSet
class Margicion extends Role implements Comparable<Margicion> {//类的相关初始化@Overridepublic void showfight(){System.out.println("挥剑攻击");System.out.println(super.blood);System.out.println(blood);}@Overridepublic String toString() {return "Margicion [blood=" + name + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + blood;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Margicion other = (Margicion) obj;if (blood != other.blood)return false;return true;}public Margicion(String name ,int blood ,int alt){this.alt=alt;super.blood=blood;this.name=name;}//覆写comparaTo方法,是调用方法的对象和括号里的元素比较,//大于返回1,小于返回-1,等于返回0,具体的操作可以自己实验@Overridepublic int compareTo(Margicion o) {if(name.compareTo(o.name)==-1){return 1;}else {return -1;}}}


http://www.ppmy.cn/news/1282701.html

相关文章

操作系统面试题目

1、进程和线程的区别&#xff1a; 调度&#xff08;进程是资源的最小单位&#xff0c;线程是程序执行的基本单位&#xff09;&#xff1b;切换&#xff08;线程切换快&#xff09;&#xff1b;拥有资源&#xff08;线程不拥有资源&#xff09;&#xff1b;系统开销2、并发和并行…

记录为 uni-app的扩展组件(uni-ui)和 微信小程序标签 添加行内样式的正确做法

如题&#xff0c;首先&#xff0c;正确为微信小程序标签添加行内样式&#xff0c;其做法是&#xff1a;&#xff08;以view为例&#xff09; <view style"width: 400rpx; height: 400rpx; background-color: green;">goods_list</view>也就是说&#xf…

顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)

目录 一. 数据结构相关概念​ 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为&#xff1a; 3.2 接口实现&#xff1a; 四、基本操作实现 4.1顺序表初始化 4.2检查空间&#xff0c;如果满了&#xff0c;进行增容​编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…

智能三维数据虚拟现实电子沙盘

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;以大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;支持高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xff0c;智能三维数…

java获取两个List集合之间的交集、差集、并集

文章目录 方式一、jdk8 Stream求交集、并集、差集方式二、求交集方式三、collections4.CollectionUtils求交集、差集、并集 本文总结一下java中获取两个List之间的交集、补集、并集的几种方式。 最常用的通过for循环遍历两个集合的方式在这里就不整理了&#xff0c;主要整理一些…

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别&#xff1f; Ask范围&#xff1a;分布式和微服务 难度指数&#xff1a;4星 考察频率&#xff1a;70-80% 开发年限&#xff1a;3年左右 从三个方面来回答该问题&#xff1a; 一.功能特性 1)HTTP是属于应用层的协议&#xff1a;超文本传输协议…

【c++】入门1

c关键字 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染&#xff…

<JavaEE> 协议格式 -- 传输层协议 TCP

目录 一、TCP协议格式长啥样&#xff1f; 二、TCP协议属性解释 1&#xff09;源端口号/目的端口号 2&#xff09;序号/确认序号 3&#xff09;TCP报头长度 4&#xff09;保留位 5&#xff09;标志位 6&#xff09;窗口大小 7&#xff09;校验和 8&#xff09;紧急指针…