package org.andengine.util.adt.map;
import java.util.Arrays;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 16:54:24 - 07.11.2010
*/
public class MultiKey<K> {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final K[] mKeys;
private final int mCachedHashCode;
// ===========================================================
// Constructors
// ===========================================================
public MultiKey(final K... pKeys) {
this.mKeys = pKeys;
this.mCachedHashCode = MultiKey.hash(pKeys);
}
// ===========================================================
// Getter & Setter
// ===========================================================
public K[] getKeys() {
return this.mKeys;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public boolean equals(final Object pOther) {
if(pOther == this) {
return true;
}
if(pOther instanceof MultiKey<?>) {
final MultiKey<?> otherMultiKey = (MultiKey<?>) pOther;
return Arrays.equals(this.mKeys, otherMultiKey.mKeys);
}
return false;
}
public static int hash(final Object ... pKeys) {
int hashCode = 0;
for(final Object key : pKeys) {
if(key != null) {
hashCode ^= key.hashCode();
}
}
return hashCode;
}
@Override
public int hashCode() {
return this.mCachedHashCode;
}
@Override
public String toString() {
return "MultiKey" + Arrays.asList(this.mKeys).toString();
}
// ===========================================================
// Methods
// ===========================================================
public K getKey(final int pIndex) {
return this.mKeys[pIndex];
}
public int size() {
return this.mKeys.length;
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}