我已经在Stack Overflow和其他网站上搜索了关于使用 Sets vs Lists 的优点、缺点和方便之处,但我真的找不到一个明确的答案来确定何时使用这个或那个。
从Hibernate的文档中可以看出,非重复记录应该放入Sets中,然后对每个可能被包装成Set的实体实现它的hashCode()和equals()。但是,对于方便和易用性的价格,有一些文章建议使用商业键作为每个实体的ID,然后无论对象的状态如何(管理的、分离的等),都可以完美地实现hashCode()和equals()。
这都没问题...直到我遇到很多情况,使用Sets就根本行不通,比如排序(虽然Hibernate给你SortedSet的想法),集合对象.get(index)、集合对象.remove(int location || Object obj)、Android的ListView/ExpandableListView的架构(GroupIds,ChildIds)等等。我的观点是:Sets很难操作,使其100%工作也很困难。
我很想把我的项目中的每个集合都改成List,因为它们的工作效果很好。我所有实体的ID都是通过MYSQL的自动生成序列生成的(
有没有人能够明确地解决我上述所有细节的疑问?
此外,是否可以使用Eclipse自动生成hashCode()和equals()来为每个实体的ID字段创建这些方法? 在每种情况下都会有效吗?
谢谢你,
Renato
从Hibernate的文档中可以看出,非重复记录应该放入Sets中,然后对每个可能被包装成Set的实体实现它的hashCode()和equals()。但是,对于方便和易用性的价格,有一些文章建议使用商业键作为每个实体的ID,然后无论对象的状态如何(管理的、分离的等),都可以完美地实现hashCode()和equals()。
这都没问题...直到我遇到很多情况,使用Sets就根本行不通,比如排序(虽然Hibernate给你SortedSet的想法),集合对象.get(index)、集合对象.remove(int location || Object obj)、Android的ListView/ExpandableListView的架构(GroupIds,ChildIds)等等。我的观点是:Sets很难操作,使其100%工作也很困难。
我很想把我的项目中的每个集合都改成List,因为它们的工作效果很好。我所有实体的ID都是通过MYSQL的自动生成序列生成的(
@GeneratedValue(strategy = GenerationType.IDENTITY)
)。有没有人能够明确地解决我上述所有细节的疑问?
此外,是否可以使用Eclipse自动生成hashCode()和equals()来为每个实体的ID字段创建这些方法? 在每种情况下都会有效吗?
谢谢你,
Renato