任何人都可以建议我在这种情况下使用哪个集合:在这种情况下应该使用哪个集合?
每个学生都有付款记录,其中包含学生/家庭付款的详细信息。系统应该确保没有重复的付款是针对学生帐户的。该计划应该能够为学生添加付款细节,并确保重复的付款细节没有得到注册。
任何人都可以建议我在这种情况下使用哪个集合:在这种情况下应该使用哪个集合?
每个学生都有付款记录,其中包含学生/家庭付款的详细信息。系统应该确保没有重复的付款是针对学生帐户的。该计划应该能够为学生添加付款细节,并确保重复的付款细节没有得到注册。
也许Map<Student, Set<Payment>>
会做。
(A Set
将不允许重复。)
如果覆盖equals
正确(和hashCode
),你可以这样做
Map<Student, Set<Payment>> studentPayments =new HashMap<Student, Set<Payment>>();
public void addStudentPayment(Student student, Payment payment) {
if (!studentPayments.containsKey(student))
studentPayments.put(student, new HashSet<Payment>());
if (studentPayments.get(student).add(payment))
System.out.println("Payment was added");
else
System.out.println("Duplicate found. Payment not added.");
}
只要你有没有重复的要求,使用Set
。如果您使用的是HashSet
,请确保将hashCode
放在您放入集合中的Objects
(还有equals
)。
您可能会发现一个Map的学生一组对付款有帮助
Map<Student, Set<Payment>> studenthistory;
一组将是您的最佳选择。一个集合是一个不包含重复元素的集合。
只记得覆盖上您的课等号方法:http://www.javapractices.com/topic/TopicAction.do?Id=17
你的情况,这将是这样的:
public boolean equals(Object obj) {
if (!obj instanceof Payment)
return false;
}
Payment p = (Payment) o;
return p.getId().equals(getId());
}
....或者类似的东西:)
我不认为集合类型会起作用。我认为你应该自己对集合执行重复检查,而不是依赖集合来完成。 – Rup