ImmutableKeyVal.java
package eu.javaexperience.collection.map;
import java.io.Serializable;
import java.util.Map.Entry;
public class ImmutableKeyVal<K,V> implements Entry<K, V>, Serializable
{
private static final long serialVersionUID = 1L;
final K k;
final V v;
private transient volatile int hash = 0;
public ImmutableKeyVal(K k,V v)
{
this.k = k;
this.v = v;
}
public KeyVal<K,V> clone()
{
return new KeyVal<K, V>(k, v);
}
public String toString()
{
return "{\""+k+"\":\""+v+"\"}";
}
@Override
public K getKey()
{
return k;
}
@Override
public V getValue()
{
return v;
}
public boolean isYourKeyValPar(K key,V val)
{
if(this.k != null)
if(!k.equals(key))
return false;
if(this.v != null)
if(!v.equals(val))
return false;
return true;
}
public boolean equals(Object o)
{
if(!(o instanceof Entry))
return false;
if(o == this)
return true;
Entry test = (Entry) o;
if(this.k != null)
{
if(!this.k.equals(test.getKey()))
return false;
}
else if(test.getKey() != null)
return false;
if(this.v != null)
{
if(!this.v.equals(test.getValue()))
return false;
}
else if(test.getKey() != null)
return false;
return true;
}
@Override
public int hashCode()
{
int ret = hash;
if(ret == 0)
{
ret = 17;
if(k != null)
ret = 31 * ret + k.hashCode();
if(v != null)
ret = 31 * ret +v.hashCode();
hash = ret;
}
return ret;
}
@Override
public V setValue(V value)
{
throw new IllegalArgumentException("Modifying ImmutableKeyVal is not permitted!");
}
}