用hashmap索引对象列表是否是一种好的做法?

用hashmap索引对象列表是否是一种好的做法?

问题描述:

我需要通过属性查找对象。用hashmap索引对象列表是否是一种好的做法?

一种选择是迭代对象数组并检查属性匹配的每个对象。

另一种选择是将对象放在散列表中,并将属性设置为键。然后可以简单地通过属性检索对象。

尽管事实上您复制了属性数据,第二个选择是否是最佳做法?

注意:该属性被认为是唯一的

+1

这取决于。你发现后如何使用这个物体?如果属性永远不会改变,这是一个好习惯。它可能不是如果你打算改变它。 – 2011-10-01 20:59:13

是的!从你给出的观点来看,使用Map通常会更好。在Map中查找值(其中密钥具有良好的散列函数)是O(1)。在数组或列表中查找元素是O(n)

+2

有一点要记住的是,如果你有很多对象,那么你的地图将不得不每隔一段时间重建一次,这可能会很昂贵 – hvgotcodes

+2

@ hvgotcodes这仍然是摊销O(1)。即使没有,增长地图仍然只有O(N)。 – Voo

+0

当然,它只是要注意的一点 – hvgotcodes

如果属性是唯一的,并且有很多要搜索的对象,或者您需要搜索很多对象,那么确定 - 创建一个索引。这往往是折衷 - 内存超速。

OTOH,如果没有太多的物体,或者你没有做太多的事情,它可能无论如何都不重要。