当前位置:  开发笔记 > 编程语言 > 正文

集合何时允许重复?

如何解决《集合何时允许重复?》经验,为你挑选了2个好方法。

所以这更像是一个"试图理解"的问题,而不是"我需要一个解决方案"的问题.对于作业,我们要求创建一个产品列表,其中包含a itemNumber和a price,但每个产品只有一个,因此没有相同的项目itemNumber.我想我可以创建一个集合,这将摆脱重复问题.但如果我添加producta1,4.99和productb1,2.99,则会添加两个产品.

这是否意味着,该集合确定这些产品是不同的b/c它们具有不同的价格,因此可以添加到集合中?



1> Sore Throat..:

假设您使用的是java.util.Set形式.java中的集合使用equals方法来比较两个对象.您希望覆盖要比较的类的Equals方法(Product),以便在项目编号匹配时告诉该组它们是相等的.

https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

编辑:正如911DidBush和Todd Sewell所提到的,每当你覆盖equals方法时,你也会想要覆盖hashCode方法,以免破坏hashCode的契约.
来自Java doc:

请注意,通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码.

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html


你应该补充一点,也应该重写hashCode方法.只有重写equals方法,然后尝试在HashSet中使用它才是灾难的接收者.
"如果你使用的是HashSet,你还需要覆盖`hashCode`方法" - >不!如果你重写equals,你必须*覆盖`hashcode`以符合`equals`的契约.

2> Todd Sewell..:

来自Setjavadoc的引用:

不包含重复元素的集合.更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素.

如您所见,通过调用相应命名的equals方法来确定两个对象是否被视为相同.请记住,在实现时,您equals还应该实现hashcode,如此处和equalsjavadoc中所述.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有