Collection 和 Collections以及Comparable 和 Comparator

本文介绍了Java中Collection和Collections的区别以及Comparable和Comparator接口的作用。Collection是集合类的上级接口,提供基本操作方法。Collections是工具类,提供排序、反转等静态方法。Comparable接口用于实现对象的自然排序,Comparator则用于自定义排序。文章探讨了如何重写这两个接口的比较方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collection 和 Collections以及Comparable 和 Comparator

一. Collection 和 Collections

​ java.util.Collection 是集合类的上级接口,它提供了对集合对象进行基本操作的通用接口方法,如:add、remove等。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

​ java.util.Collections 是一个帮助类。此类不能实例化,就像一个工具类,服务于Java的Collection框架。它包含有各种有关集合操作的静态方法,例如:实现对集合的排序、混排(shuffle)、反转(reverse)、返回集合中最小元素(min)、返回集合中最大元素(max)等方法。

二.Comparable 和 Comparator
  • comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序
  • comparator接口实际上是出自 java.util 包它有一个compare(Object obj1, Object obj2)方法用来排序

一般我们需要对一个集合使用自定义排序时,我们就要重写compareTo()方法或compare()方法,当我们需要对某一个集合实现两种排序方式,比如一个song对象中的歌名和歌手名分别采用一种排序方法的话,我们可以重写compareTo()方法和使用自制的Comparator方法或者以两个Comparator来实现歌名排序和歌星名排序,使用第二种继承Comparator接口的方法意味着我们要实现两个参数版的比较方法。

​ Comparable 是排序接口,意味着“该类支持排序”。Comparable接口只包括一个方法,它的定义如下:

package java.lang;
import java.util.*;

public interface Comparable<T> {
    public int compareTo(T o);
}

​ Comparator 是比较器接口,若某个类本身不支持排序(即没有实现Comparable接口),那么我们可以通过“实现Comparator接口来新建一个比较器”,然后通过该类比较器对类进行排序。

​ Comparator接口包括两个方法:

package java.util;

public interface Comparator<T> {

    int compare(T o1, T o2);

    boolean equals(Object obj);
}

总结:
“Comparable”,它是一个排序接口,只包含一个函数 compareTo()。一个类实现了Comparable接口,就意味着“该类本身支持排序”,它可以直接通过 Arrays.sort() 或 Collections.sort() 进行排序。
"Comparator"它是一个比较器接口,包括两个函数:compare() 和 equals()。一个类实现了Comparator 接口,那么它就是一个“比较器”。其它的类,可以根据该比较器去排序。

综上所述:Comparable是内部比较器,而Comparator是外部比较器。
一个类本身实现了Comparable比较器,就意味着它本身支持排序;若它本身没实现Comparable,也可以通过外部比较器Comparator进行排序。

那么该如何重写Comparator接口中的compare(Object o1, Object o2)方法呢?

Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                String s1 = String.valueOf(o1) + String.valueOf(o2);
                String s2 = String.valueOf(o2) + String.valueOf(o1);
                if (s1.compareTo(s2) < 0) {
                    // 如果前者小于后者,则返回-1
                    return -1;
                }
                if (s1.compareTo(s2) > 0){
                    // 如果前者大于后者,则返回1
                    return 1;
                }
                // 如果两者相等,则返回0
                return 0;
            }
        });

那么该如何重写Comparable接口中的compareTo(Object o2)方法呢?

package java.lang;
import java.util.*;

public interface Comparable<T> {
    public int compareTo(T o);
}
// 说明:一般来讲,o1.compareTo(Object o2)   如果o1 < o2的话,那么返回-1;如果o1>o2的话,返回1;否则,相等的话返回0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值