単純なキャッシュ

class test{
    public ElementType getElement(long id) {
        ElementType ret = null;
        for (ElementType et : rootnode.getElement()) {
            if (et.getId() == id) {
                ret = et;
                break;
            }
        }
        return ret;
    }
}

という頭の悪いコードがあったのだが、これを

class test{
    final static int cache_size = 100;
    ElementType[] et_cache;
    public test(){
        et_cache = new ElementType[cache_size];
    }
    public ElementType getElement(long id) {
        ElementType ret = null;
        int tmp=((int) id) % cache_size;
        if (et_cache[tmp]!=null&&et_cache[tmp].getId() == id) {
            ret = et_cache[tmp];
        } else {
            for (ElementType et : rootnode.getElement()) {
                if (et.getId() == id) {
                    ret = et;
                    break;
                }
            }
            et_cache[tmp] = ret;
        }
        return ret;
    }
}

とやっぱり頭の悪い改造を加えてみたところ、あまり期待していなかったのに結構早くなった。少ないながらもキャッシュに引っかかることがあったのだろう。