diff options
| author | Bryce McKinlay <bryce@gcc.gnu.org> | 2001-10-16 06:47:01 +0100 |
|---|---|---|
| committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2001-10-16 06:47:01 +0100 |
| commit | 41878ce27efa7dac17cc1f3b283303cd6bbedd1e (patch) | |
| tree | ae47326b1fbf6a430f495ac6b9f0b6405f37d7d6 /libjava/java/util/Comparator.java | |
| parent | ffb5e2e21f98abfdb6cb7efdf8ff2e911f09ec64 (diff) | |
[multiple changes]
2001-10-15 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
* java/util/HashMap.java (HashEntry.clone): Removed.
(HashMap(Map)): Use putAllInternal.
(clone): Likewise.
(putAllInternal): New method. Efficient counterpart to putAll which
does not call put().
* java/util/LinkedHashMap.java (rethread): Removed.
(putAllInternal): New method. Clear "head" and "tail".
(addEntry): New argument "callRemove". Don't call removeEldestEntry()
if callRemove == false.
* Makefile.am: Add new classes RandomAccess and LinkedHashMap.
* Makefile.in: Rebuilt.
2001-10-15 Eric Blake <ebb9@email.byu.edu>
* java/util/Collection.java: Updated javadoc.
* java/util/Comparator.java: Updated javadoc.
* java/util/Enumeration.java: Updated javadoc.
* java/util/Iterator.java: Updated javadoc.
* java/util/List.java: Updated javadoc.
* java/util/ListIterator.java: Updated javadoc.
* java/util/Map.java: Updated javadoc.
* java/util/RandomAccess.java: New file.
* java/util/Set.java: Updated javadoc.
* java/util/SortedMap.java: Updated javadoc.
* java/util/SortedSet.java: Updated javadoc.
From-SVN: r46277
Diffstat (limited to 'libjava/java/util/Comparator.java')
| -rw-r--r-- | libjava/java/util/Comparator.java | 71 |
1 files changed, 53 insertions, 18 deletions
diff --git a/libjava/java/util/Comparator.java b/libjava/java/util/Comparator.java index fc61fc30280..8522301eedf 100644 --- a/libjava/java/util/Comparator.java +++ b/libjava/java/util/Comparator.java @@ -29,36 +29,67 @@ package java.util; /** * Interface for objects that specify an ordering between objects. The ordering - * can be <EM>total</EM>, such that two objects only compare equal if they are - * equal by the equals method, or <EM>partial</EM> such that this is not - * necessarily true. For example, a case-sensitive dictionary order comparison - * of Strings is total, but if it is case-insensitive it is partial, because - * "abc" and "ABC" compare as equal even though "abc".equals("ABC") returns - * false. + * should be <em>total</em>, such that any two objects of the correct type + * can be compared, and the comparison is reflexive, anti-symmetric, and + * transitive. It is also recommended that the comparator be <em>consistent + * with equals</em>, although this is not a strict requirement. A relation + * is consistent with equals if these two statements always have the same + * results (if no exceptions occur):<br> + * <code>compare((Object) e1, (Object) e2) == 0</code> and + * <code>e1.equals((Object) e2)</code><br> + * Comparators that violate consistency with equals may cause strange behavior + * in sorted lists and sets. For example, a case-sensitive dictionary order + * comparison of Strings is consistent with equals, but if it is + * case-insensitive it is not, because "abc" and "ABC" compare as equal even + * though "abc".equals("ABC") returns false. * <P> * In general, Comparators should be Serializable, because when they are passed * to Serializable data structures such as SortedMap or SortedSet, the entire * data structure will only serialize correctly if the comparator is * Serializable. + * + * @author Original author unknown + * @author Eric Blake <ebb9@email.byu.edu> + * @see Comparable + * @see TreeMap + * @see TreeSet + * @see SortedMap + * @see SortedSet + * @see Arrays#sort(Object[], Comparator) + * @see java.io.Serializable + * @since 1.2 + * @status updated to 1.4 */ public interface Comparator { /** * Return an integer that is negative, zero or positive depending on whether * the first argument is less than, equal to or greater than the second - * according to this ordering. This method should obey the following contract: - * <UL> - * <LI>if compare(a, b) < 0 then compare(b, a) > 0</LI> - * <LI>if compare(a, b) throws an exception, so does compare(b, a)</LI> - * <LI>if compare(a, b) < 0 and compare(b, c) < 0 then compare(a, c) - * < 0</LI> - * <LI>if a.equals(b) or both a and b are null, then compare(a, b) == 0. - * The converse need not be true, but if it is, this Comparator - * specifies a <EM>total</EM> ordering.</LI> - * </UL> + * according to this ordering. This method should obey the following + * contract: + * <ul> + * <li>if compare(a, b) < 0 then compare(b, a) > 0</li> + * <li>if compare(a, b) throws an exception, so does compare(b, a)</li> + * <li>if compare(a, b) < 0 and compare(b, c) < 0 then compare(a, c) + * < 0</li> + * <li>if compare(a, b) == 0 then compare(a, c) and compare(b, c) must + * have the same sign</li + * </ul> + * To be consistent with equals, the following additional constraint is + * in place: + * <ul> + * <li>if a.equals(b) or both a and b are null, then + * compare(a, b) == 0.</li> + * </ul><p> * + * Although it is permissible for a comparator to provide an order + * inconsistent with equals, that should be documented. + * + * @param o1 the first object + * @param o2 the second object + * @return the comparison * @throws ClassCastException if the elements are not of types that can be - * compared by this ordering. + * compared by this ordering. */ int compare(Object o1, Object o2); @@ -66,8 +97,12 @@ public interface Comparator * Return true if the object is equal to this object. To be * considered equal, the argument object must satisfy the constraints * of <code>Object.equals()</code>, be a Comparator, and impose the - * same ordering as this Comparator. + * same ordering as this Comparator. The default implementation + * inherited from Object is usually adequate. + * * @param obj The object + * @return true if it is a Comparator that imposes the same order + * @see Object#equals(Object) */ boolean equals(Object obj); } |
