/* IdentityComparator.java
Purpose:
The comparator uses == and System.identifyHashCode to do
the comparison.
Description:
History:
Fri Sep 13 10:14:11 2002, Created by tomyeh
Copyright (C) 2002 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.util;
import java.util.Comparator;
/**
* The comparator uses == and System.identifyHashCode to compare two objects.
* It assumes if o1 != o2, then c1 != c2 where c1 = System.identityHashCode(o1).
*
* <p>This is useful if dynamic proxy is used with TreeSet or TreeMap
* (so equals is expensive).
* Reason: the speed of identifyHashCode is much faster than dynamic proxy
* (150:1).
*
* <p>However, if possible, java.util.IdentityHashMap and {@link IdentityHashSet}
* are preferred.
*
* @author tomyeh
* @see IdentityHashSet
*/
public class IdentityComparator<T> implements Comparator<T> {
public IdentityComparator() {
}
//-- Comparator --//
public int compare(T o1, T o2) {
if (o1 == o2)
return 0;
int c1 = System.identityHashCode(o1);
int c2 = System.identityHashCode(o2);
return c1 > c2 ? 1: c1 < c2 ? -1: 0;
}
}