package com.kartoflane.superluminal2.components; public class Tuple<K, V> { private K k = null; private V v = null; public Tuple() { } public Tuple(K key, V value) { k = key; v = value; } public void setKey(K key) { k = key; } public K getKey() { return k; } public void setValue(V value) { v = value; } public V getValue() { return v; } public int hashCode() { int hashK = k != null ? k.hashCode() : 0; int hashV = v != null ? v.hashCode() : 0; return (hashK + hashV) * hashV + hashK; } public boolean equals(Object o) { if (o instanceof Tuple) { Tuple<?, ?> ot = (Tuple<?, ?>) o; return ((this.k == ot.k || (this.k != null && ot.k != null && this.k.equals(ot.k))) && (this.v == ot.v || (this.v != null && ot.v != null && this.v.equals(ot.v)))); } return false; } public String toString() { return "(" + k + ", " + v + ")"; } }