所以这更像是一个“试图理解”的问题,而不是“我需要一个解决方案”的问题。对于作业,我们要求创建一个产品列表,其中包含itemNumber
和price
,但每个产品只有一个,因此没有相同itemNumber
的项目。我想我可以创建一个集合,这将摆脱重复问题。但是,如果我添加producta
1,4.99和productb
1,2.99,则会添加两个产品。
这是否意味着,该套装确定这些产品是不同的b / c它们有不同的价格,因此可以添加到集合中?
答案 0 :(得分:5)
假设您使用的是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
答案 1 :(得分:5)
来自Set
javadoc:
不包含重复元素的集合。更正式地说,集合不包含元素e1和e2对,例如e1.equals(e2),最多只有一个null元素。
如您所见,通过调用相应命名的equals
方法确定两个对象是否被视为相同。请注意,在实施equals
时,您还应按照here和equals
javadoc中的说明实施hashcode
。