gnu.trove.impl.hash.TCustomObjectHash Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trove4j Show documentation
Show all versions of trove4j Show documentation
The Trove library provides high speed regular and primitive
collections for Java.
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2001, Eric D. Friedman All Rights Reserved.
// Copyright (c) 2009, Rob Eden All Rights Reserved.
// Copyright (c) 2009, Jeff Randall All Rights Reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
///////////////////////////////////////////////////////////////////////////////
package gnu.trove.impl.hash;
import gnu.trove.strategy.HashingStrategy;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
/**
* An open addressed hashing implementation for Object types.
*
* @author Rob Eden
* @author Eric D. Friedman
* @author Jeff Randall
* @version $Id: TObjectHash.java,v 1.1.2.6 2009/11/07 03:36:44 robeden Exp $
*/
@SuppressWarnings( { "UnusedDeclaration" } )
abstract public class TCustomObjectHash extends TObjectHash {
static final long serialVersionUID = 8766048185963756400L;
protected HashingStrategy super T> strategy;
/** FOR EXTERNALIZATION ONLY!!! */
public TCustomObjectHash() {}
/**
* Creates a new TManualObjectHash
instance with the
* default capacity and load factor.
*/
public TCustomObjectHash( HashingStrategy super T> strategy ) {
super();
this.strategy = strategy;
}
/**
* Creates a new TManualObjectHash
instance whose capacity
* is the next highest prime above initialCapacity + 1
* unless that value is already prime.
*
* @param initialCapacity an int
value
*/
public TCustomObjectHash( HashingStrategy super T> strategy, int initialCapacity ) {
super( initialCapacity );
this.strategy = strategy;
}
/**
* Creates a new TManualObjectHash
instance with a prime
* value at or near the specified capacity and load factor.
*
* @param initialCapacity used to find a prime capacity for the table.
* @param loadFactor used to calculate the threshold over which
* rehashing takes place.
*/
public TCustomObjectHash( HashingStrategy super T> strategy, int initialCapacity,
float loadFactor ) {
super( initialCapacity, loadFactor );
this.strategy = strategy;
}
@Override
protected int hash( Object obj ) {
//noinspection unchecked
return strategy.computeHashCode( ( T ) obj );
}
@Override
protected boolean equals( Object one, Object two ) {
//noinspection unchecked
return two != REMOVED && strategy.equals( ( T ) one, ( T ) two );
}
@Override
public void writeExternal( ObjectOutput out ) throws IOException {
// VERSION
out.writeByte( 0 );
// SUPER
super.writeExternal( out );
// STRATEGY
out.writeObject( strategy );
}
@Override
public void readExternal( ObjectInput in )
throws IOException, ClassNotFoundException {
// VERSION
in.readByte();
// SUPER
super.readExternal( in );
// STRATEGY
//noinspection unchecked
strategy = ( HashingStrategy ) in.readObject();
}
} // TCustomObjectHash