Package java.util

## Interface Comparator<T>

-     public interface Comparator<T>

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `int` | `compare​(T o1, T o2)` | Compares its two arguments for order.
    `boolean` | `equals​(Object obj)` | Indicates whether some other object is "equal to" this comparator.

- - ### Method Detail

    - #### compare

          int compare​(T o1,
                      T o2)

      Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

      In the foregoing description, the notation `sgn(`expression `)` designates the mathematical signum function, which is defined to return one of `-1`, `0`, or `1` according to whether the value of expression is negative, zero or positive.

      The implementor must ensure that `sgn(compare(x, y)) == -sgn(compare(y, x))` for all `x` and `y`. (This implies that `compare(x, y)` must throw an exception if and only if `compare(y, x)` throws an exception.)

      The implementor must also ensure that the relation is transitive: `((compare(x, y)>0) && (compare(y, z)>0))` implies `compare(x, z)>0`.

      Finally, the implementor must ensure that `compare(x, y)==0` implies that `sgn(compare(x, z))==sgn(compare(y, z))` for all `z`.

      It is generally the case, but not strictly required that `(compare(x, y)==0) == (x.equals(y))`. Generally speaking, any comparator that violates this condition should clearly indicate this fact. The recommended language is "Note: this comparator imposes orderings that are inconsistent with equals."

      Parameters:
        `o1` - the first object to be compared.
        `o2` - the second object to be compared.
      Returns:
        a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
      Throws:
        `NullPointerException` - if an argument is null and this comparator does not permit null arguments
        `ClassCastException` - if the arguments' types prevent them from being compared by this comparator.

    - #### equals

          boolean equals​(@Nullable
                         Object obj)

      Indicates whether some other object is "equal to" this comparator. This method must obey the general contract of `Object.equals(Object)`. Additionally, this method can return `true` only if the specified object is also a comparator and it imposes the same ordering as this comparator. Thus, `comp1.equals(comp2)` implies that `sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))` for every object reference `o1` and `o2`.

      Note that it is always safe not to override `Object.equals(Object)`. However, overriding this method may, in some cases, improve performance by allowing programs to determine that two distinct comparators impose the same order.

      Overrides:
        `equals` in class `Object`
      Parameters:
        `obj` - the reference object with which to compare.
      Returns:
        `true` only if the specified object is also a comparator and it imposes the same ordering as this comparator.
      See Also:
        `Object.equals(Object)`, `Object.hashCode()`