【问题标题】:What to choose between Set and List in hibernate [closed]在休眠中的Set和List之间选择什么[关闭]
【发布时间】:2013-07-06 18:04:06
【问题描述】:

我没有任何特殊的想法来订购我的收藏或不允许收藏中的重复。在我的实体类中我应该使用什么?设置还是列表?在性能方面是否有任何考虑?

假设我们要对这个实体执行 CRUD 操作。我不想让结果排序。那么我应该使用什么?在实体中列出或设置。为了最大限度地提高性能,用户应该是什么

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

【问题讨论】:

  • 我觉得这个太宽泛了。答案通常是“这取决于。”。列表和集合都有有效的用例。
  • @vels4j 对不起 vels。第一个链接没有讨论性能方面的问题,我知道该列表用于订购并设置为允许重复。第二个链接没有答案
  • @ViktorSeifert 是的,我接受这似乎很广泛。但是如果有人可以解决更广泛的问题,那么详细的答案会很方便

标签: java performance hibernate


【解决方案1】:

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

列表:允许其中有重复的元素。

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

如果你谈论性能,我知道的一点是:

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

如果是Set,则不需要这样的列。

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

在List的情况下,删除元素后,您需要更新List的所有其他元素以更新它们的索引。这是开销。

而Set,由于没有索引列,所以不用担心其他元素的索引。

所以我的建议是:如果您在从数据库中获取集合时不需要按特定顺序排列,您应该选择Set。

【讨论】:

  • 谢谢拉斯,我也有这种感觉。无论如何我想从专家那里确认一下。这是我对你的支持。我会等待更多以接受答案。
  • @SanjayaLiyanage 当然。即使我正在寻找一些更有用的答案。这只是我知道的一点。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2010-11-23
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多