1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A {@code Comparator} is used to compare two objects to determine their ordering with
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * respect to each other. On a given {@code Collection}, a {@code Comparator} can be used to
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * obtain a sorted {@code Collection} which is <i>totally ordered</i>. For a {@code Comparator}
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to be <i>consistent with equals</i>, its {code #compare(Object, Object)}
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method has to return zero for each pair of elements (a,b) where a.equals(b)
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * holds true. It is recommended that a {@code Comparator} implements
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link java.io.Serializable}.
283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson *
293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.2
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic interface Comparator<T> {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compares the two specified objects to determine their relative ordering. The ordering
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * implied by the return value of this method for all possible pairs of
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code (object1, object2)} should form an <i>equivalence relation</i>.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This means that
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <ul>
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <li>{@code compare(a,a)} returns zero for all {@code a}</li>
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <li>the sign of {@code compare(a,b)} must be the opposite of the sign of {@code
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * compare(b,a)} for all pairs of (a,b)</li>
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <li>From {@code compare(a,b) > 0} and {@code compare(b,c) > 0} it must
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * follow {@code compare(a,c) > 0} for all possible combinations of {@code
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * (a,b,c)}</li>
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </ul>
453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param object1
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            an {@code Object}.
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param object2
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            a second {@code Object} to compare with {@code object1}.
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return an integer < 0 if {@code object1} is less than {@code object2}, 0 if they are
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         equal, and > 0 if {@code object1} is greater than {@code object2}.
523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     * @throws ClassCastException
533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *                if objects are not of the correct type.
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int compare(T object1, T object2);
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compares this {@code Comparator} with the specified {@code Object} and indicates whether they
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * are equal. In order to be equal, {@code object} must represent the same object
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * as this instance using a class-specific comparison.
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * A {@code Comparator} never needs to override this method, but may choose so for
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * performance reasons.
643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param object
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the {@code Object} to compare with this comparator.
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return boolean {@code true} if specified {@code Object} is the same as this
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code Object}, and {@code false} otherwise.
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see Object#hashCode
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see Object#equals
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(Object object);
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
74