package org.limewire.collection;
import java.util.Map;
/**
* Stores a property key and its corresponding value pair. <code>KeyValue</code>
* implements <code>Map.Entry</code>, but there's no backing map.
*
* <pre>
* System.out.println(new KeyValue<String, String>("myKey", "myValue"));
*
* Output:
* myKey = myValue
* </pre>
*/
public class KeyValue<K, V> implements Map.Entry<K, V> {
/** key of the property */
private K key = null;
/** Value of the property */
private V value = null;
/**
* Constructor.
*
* @param key key of the property
* @param value corresponding value of the property
*/
public KeyValue(K key, V value) {
this.key = key;
this.value = value;
}// end of constructor
/**
* Default Constructor.
*/
public KeyValue() {
this.key = null;
this.value = null;
}
/**
* Sets the key and value fields.
*
* @param key key of the property
* @param value corresponding value of the property
*/
public void set(K key, V value) {
this.key = key;
this.value = value;
}
/**
* Compares the instance of this class with another instance. Returns true,
* if the key field is same, regardless of the value.
*
* @param o Another instance of the KeyValue class to which it has to be
* compared.
*/
@Override
public boolean equals(Object o) {
KeyValue keyValue = (KeyValue) o;
return key.equals(keyValue.getKey());
}
/**
* Converts the key Value pair into a string representation.
*/
@Override
public String toString() {
return key + " = " + value;
}
/**
* @return the key(key) in the key value pair
*/
public K getKey() {
return key;
}
/**
* @return the value corresponding to this entry.
*/
public V getValue() {
return value;
}
/**
* Replaces the value corresponding to this entry with the specified value.
*
* @param value new value to be stored in this entry.
* @return old value corresponding to the entry.
*/
public V setValue(V value) {
// get the old value
V oldValue = this.value;
// change the value
this.value = value;
// return the old value
return oldValue;
}
/**
* Returns the hash code value for this map entry. The hash code of a map
* entry <tt>e</tt> is defined to be:
*
* <pre>
* (e.getKey() == null ? 0 : e.getKey().hashCode())
* ˆ (e.getValue() == null ? 0 : e.getValue().hashCode())
* </pre>
*
* This ensures that <tt>e1.equals(e2)</tt> implies that
* <tt>e1.hashCode()==e2.hashCode()</tt> for any two Entries <tt>e1</tt> and
* <tt>e2</tt>, as required by the general contract of
* <tt>Object.hashCode</tt>.
*
* @return the hash code value for this map entry.
* @see Object#hashCode()
* @see Object#equals(Object)
* @see #equals(Object)
*/
@Override
public int hashCode() {
return ((key == null ? 0 : key.hashCode()) ^ (value == null ? 0 : value.hashCode()));
}
}// end of class