0

我想使用 android LruCache 将位图存储在内存中,但我通过哈希、宽度、高度来识别位图。所以我做了这样的事情:

class Key {
    private String hash;
    private int widht, height;
}

LruCache<Key, Bitmap> imagesCache = new LruCache<Key, Bitmap>(1024) {
 @Override
    protected int sizeOf(Key key, Bitmap value) {
        // TODO Auto-generated method stub
        return super.sizeOf(key, value);
    }
}

这是一个正确的方法,下一步是什么?

提前致谢。

4

2 回答 2

0

您需要覆盖类中用作键的equalsand方法。hashCode确保它们是一致的,即当equals返回时true,也hashCode必须返回相同的值。

于 2013-08-28T15:27:13.060 回答
0

所以我必须自己回答。我用谷歌搜索,我在http://www.javaranch.com/journal/2002/10/equalhash.html上找到了 Equals and Hash Code 文章,据此我做了这样的事情:

private class Key {
    public Key(String hash, int width, int height, boolean fill) {
        this.hash = hash;
        this.width = width;
        this.height = height;
    }

    @Override
    public int hashCode() {
        int hash = 7;

        hash = 31 * hash + this.width;
        hash = 31 * hash + this.height;

        return hash;
    }

    public boolean equals(Object obj) {

        if(this == obj)
            return true;

        if(obj == null || obj.getClass() != this.getClass())
            return false;

        return this.width == ((Key)obj).width && this.height 
               == ((Key)obj).height && (this.hash == ((Key)obj).hash || 
               (this.hash != null && this.hash.equals(((Key)obj).hash)));
    }

Mabey 我会被某人使用。

于 2013-09-01T00:18:37.870 回答