public int hashCode() { long val1 = 0, val2 = 0;
public int hashCode() {   int hash = 0; int len = addr.length; int i = len > 4 ? len - 4 : 0;
    public int hashCode() {        long val1 = 0, val2 = 0;        // Its obvious here that I have no idea how to generate a good        // hash key        for (int i = 0; i < addr.length; i++)            val1 = val1 + (addr[ i] << ((addr.length - i) / 8));        for (int i = 0; i < addr.length; i++)            val2 = val2 + (addr[ i] * 10 * i);        val1 = (val1 >> 1) ^ val2;        return ((int) val1);    }