gpt4 book ai didi

map 与列表中的 Java 缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:31 25 4
gpt4 key购买 nike

目前在我的遗留代码中,我以列表的形式缓存了一些数据库信息 List<CachedObject> .

CachedObject看起来像这样

    public class CachedObject
{
private int id;
private int id_type;
private int id_other_type;

// getters and setters
}

大多数时候我通过函数获取一个特定的对象:

public CachedObject getById( Integer id )
{
if( id != null )
for ( CachedObject cachedObject : this.cachedObjectList )
if( cachedObject.getId().equals( id ) )
return cachedObject;

return null;

}

我的问题是在 Map<Integer, CachedObject> 中缓存对象会更好吗?与 id作为关键。在这种情况下,我担心的是该列表中的其他 getter 必须如下所示:

    public CachedObject getByIdType( Integer id )
{
if( id != null )
for ( CachedObject cachedObject : cachedObjectList.values() )
if( cachedObject.getId().equals( id ) )
return cachedObject;

return null;

}

我以前没有这样做过,因为我真的不知道这个 map 缓存的缺点,而且一开始不这样做似乎很愚蠢。

最佳答案

HashMap.values()直接返回一个集合。没有计算或数据复制完成。它尽可能快。

因此,以 HashMap 的形式进行缓存是适合您的情况。

但是考虑一下,如果你想要List<CachedObject>在你的代码中

ArrayList<CachedObject> list = new ArrayList<CachedObject>(hashMap.values());

ArrayList、valuesList调用集合hashMap toArray()方法,该方法本质上是从集合中的 0..N(大小)元素执行 for 循环。

关于 map 与列表中的 Java 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31784294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com