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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。