在休眠中选择Set和List之间的选项

时间:2013-07-09 08:02:56

标签: java performance hibernate

我没有任何特别想法让我的收藏品订购或不允许复制品在集合中。在我的实体课中,我应该使用什么?设置还是列表?在性能方面有任何考虑吗?

让我们说我们想对这个实体执行CRUD操作。我不希望订购结果。那我该怎么用?在实体中列出或设置。应该是什么用户才能最大限度地提高性能

在考虑性能的实体中使用List和Set的有效情况是什么?不是为了订购或限制重复?

2 个答案:

答案 0 :(得分:2)

正如vels4j在评论链接中给出的另一篇文章所述,以下情况绝对正确。

  

列表:允许包含重复元素。

     

设置:所有元素都应该是唯一的。

如果你谈论表现,我知道的一点如下:

如果您选择List&使用Hiberante将其映射到表,您需要添加一个额外的列作为索引。此列将作为List中元素的位置/索引/顺序,因为List是有序集合。有关索引的详细信息,请参阅this

如果Set,则不需要此列。

现在举个例子,你需要从List/Set中删除一个元素。

如果是List,删除元素后,您需要更新List的所有其他元素以更新其索引。这是一个开销。

如果是Set,因为你没有索引列,你不必担心其他元素的索引。

所以我的建议是:如果您在从数据库中提取集合时不需要您的集合,则应该使用Set

答案 1 :(得分:0)

HashSet O(1)中按值查找元素。在ArrayList中,它是O(n)。但字典结构HashSet可能比ArrayList慢一点。 ArrayLists随机访问速度更快。