harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Denis Kishenko" <dkishe...@gmail.com>
Subject Re: [optimization] Algorithmic tricks
Date Wed, 26 Jul 2006 14:26:43 GMT
I have watched over 100 hashCode implementations.



Frequently hash code is a sum of several other hashes. Such implementation
kill hash idea, it's terrible.



Here is some examples


    public int hashCode() {
        int result = 0;
        Iterator<Map.Entry<K, V>> it = entrySet().iterator();
        while (it.hasNext()) {
            result += it.next().hashCode();
        }
        return result;
    }

     public int hashCode() {
        int i = this.addrType.hashCode();

        for (int j = 0; j < this.buf.length; j++) {
            i += this.buf[j];
        }
        return i;
    }

    public int hashCode() {
        return modifiers *+* ( keyCode != KeyEvent.VK_UNDEFINED ?
len               keyCode : keyChar) *+* (onKeyRelease ? -1 : 0);
    }

  public int hashCode() {
  return id.hashCode() + bcc.hashCode();
 }


and many others... also I have found such "algorithms" =)


    private long* *token;

     public int hashCode() {
        return (int) token;
    }

     private long objNum;

     public int hashCode() {
        return (int) objNum;
    }




The most of hashCode() functions are implemented in different ways. It's not
problem, but it looks like scrappy, there is no single style. And finally we
have class *org.appache.harmony.misc.HashCode *for this aim!



Example of using


     public int hashCode() {
        HashCode hash = new HashCode();
        hash.append(m00);
        hash.append(m01);
        hash.append(m02);
        hash.append(m10);
        hash.append(m11);
        hash.append(m12);
        return hash.hashCode();
    }

    public int hashCode() {
        HashCode hash = new HashCode();
        hash.append(width);
        hash.append(cap);
        hash.append(join);
        hash.append(miterLimit);
        if (dash != null) {
            hash.append(dashPhase);
            for(int i = 0; i < dash.length; i++) {
                hash.append(dash[i]);
            }
        }
        return hash.hashCode();
    }


But only several classes are using it. I suggest integrate HashCode in
all hashCode() implementations (about 200 files), I can do this. Anybody
else can improve HashCode work.



Any comments?



2006/7/26, Anton Luht <anton.luht@gmail.com>:
>
> Hello,
>
> One of possible candidates for such optimization may be for example
> String.hashCode() . Current implementation is rather common. Wikipedia
> points to hash functions that look more advanced (
> http://en.wikipedia.org/wiki/Hash_function ).
>
>
> --
> Regards,
> Anton Luht,
> Intel Middleware Products Division
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>


-- 
Denis M. Kishenko
Intel Middleware Products Division

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message