我目前正在列表List<CachedObject>
中缓存数据库对象。 CachedObject看起来像这样:
class CachedObject
{
private int id;
private int id_type;
private int id_other_type;
// getters and setters
}
我目前正在使用此函数从缓存中获取对象
public CachedObject getCachedObjectById( Integer id )
{
for ( CachedObject cachedObject : cachedObjectList )
if( id.equals(cachedObject.getId() ) )
return cachedObject;
return null;
}
public List<CachedObject> getCachedObjectByIdType( Integer idType )
{
List<CachedObject> cachedObjectList = new ArrayList<CachedObject>();
for ( CachedObject cachedObject : this.cachedObjectList )
if( idType.equals(cachedObject.getIdType() ) )
cachedObjectList.add(cachedObject);
return cachedObjectList;
}
由于这样做很多,加载缓存以在单独的地图中分发信息(在这种情况下为3)时会更快:
Map<Integer, CachedObject> cachedObject_to_id
Map<Integer, List<CachedObject>> cachedObjectList_to_idType
Map<Integer, List<CachedObject>> cachedObjectList_to_idOtherType
当获取对象时,只需从地图中获取。
修改:
任何不同时间的缓存对象数为20 - 500。
答案 0 :(得分:1)
访问哈希表通常比使用顺序扫描方法更快。但如果只检查几个值(低于10),则无关紧要。
备注:方法getCachedObjectByIdType返回一个可变列表。如果客户端代码不在您的控制之下,您可以将其转换为不可变列表。
我稍微倾向于使用地图。原因:
但代码变得更复杂。当您在最坏的情况下必须扫描500个对象时,这意味着,通过使用哈希映射,您的代码可以快两个数量级。但是,这可能对应用程序没有影响。要问的问题: