比较Comparable与Comparator

比较Comparable与Comparator

1.Comparable

  1. Comparable对实现它的每个类的对象进行整体排序。这个接口需要类本身去实现,并重写comppareTo方法
  2. 若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
  3. 此外,实现 Comparable 接口的类的对象 可以用作 “有序映射 ( 如 TreeMap)” 中的键或 “有序集合 (TreeSet)” 中的元素,而不需要指定比较器。
public class Times implements Comparable<Times>{
		int year;
		int month;
		int day;
		public Times(int year,int month,int day) {
			this.year = year;
			this.month = month;
			this.day = day;
		}
		public Times() {}
		@Override
		public int compareTo(Times o) {
			// TODO Auto-generated method stub
			if (this.year > o.year)
				return 1;
			else if (this.year == o.year) {
				if (this.month > o.month)
					return 1;
				else if (this.month == o.month) {
					if(this.day > o.day) {
						return 1;
					}
					else if(this.day == o.day)
						return 0;
					else {
						return -1;
					}
				}else 
					return -1;
				
			}else 
				return -1;
		}	
	}
TreeMap<Times, String> treeMap = new TreeMap<日期问题7.Times, String>();
		treeMap.put(times2, "1960-2-23");
		treeMap.put(times3, "1959-3-13");
		treeMap.put(times4, "1959-3-23");
		System.out.println(treeMap);
输出:
{Times [year=1959, month=3, day=13]=1959-3-13, 
Times [year=1959, month=3, day=23]=1959-3-23, 
Times [year=1960, month=2, day=23]=1960-2-23}

2.Comparator

  1. 我们的这个类无法修改,我们又要对其进行排序,例如下面的Person2
public final class Person2
{
    private int age;
    private String name;

    public Person2(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

    @Override 
    public String toString()
    {
        return name+":"+age;
    }

    //getter and setter方法省略....
}

  1. 这个类已经固定,无法进行对其类自身的修改,也修饰词final了,你也别想继承再implements Comparable,那么此时怎么办呢?在类的外部使用Comparator的接口
		Person2 p1 = new Person2("zzh",18);
        Person2 p2 = new Person2("jj",17);
        Person2 p3 = new Person2("qq",19);
        List<Person2> list2 = new ArrayList<Person2>();
        list2.add(p1);
        list2.add(p2);
        list2.add(p3);
        System.out.println(list2);
        Collections.sort(list2,new Comparator<Person2>(){

            @Override
            public int compare(Person2 o1, Person2 o2)
            {
	            if(o1 == null || o2 == null)
					return 0;
                return o1.getAge()-o2.getAge();
            }

        });
        System.out.println(list2);

参考链接:https://blog.csdn.net/u013256816/article/details/50899416

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页

打赏

cainaio程序猿

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者