Java学习:Comparator和Comparable
2023-12-26 23:40:00
一.Comparator的使用
1.Arrays.sort
????????给基本类型的数组进行排序的方法,默认是实现升序,也可以通过方法写匿名类自定义实现升降序排序。
代码:
Arrays.sort(arr,new Comparator<Integer>(){
@Override
public 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> {
//类的相关初始化
@Override
public void showfight(){
System.out.println("挥剑攻击");
System.out.println(super.blood);
System.out.println(blood);
}
@Override
public String toString() {
return "Margicion [blood=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + blood;
return result;
}
@Override
public 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,具体的操作可以自己实验
@Override
public int compareTo(Margicion o) {
if(name.compareTo(o.name)==-1){
return 1;
}else {
return -1;
}
}
}
文章来源:https://blog.csdn.net/qq_55038440/article/details/135232891
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!