包位置不同:

  • Comparable 的位置:java.lang.Comparable;
  • Comparator 的位置:java.util.Comparator;

    使用场景不同:

  • Comparable 一般是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了 Comparable 接口的 compareTo(Object obj)方法)

  • Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为,可以将未提前实现 Comparable 接口对象相互比较,一般需要传入排序方法内,通常使用匿名类或 Lambda 表达式实现 Comparator 接口的 compare(Object obj1, Object obj2)