【发布时间】:2011-09-05 19:13:07
【问题描述】:
谁能建议我在这种情况下使用哪个集合:
每个学生都有付款历史记录,其中包含学生/家庭付款的详细信息。系统应确保学生账户没有重复付款。该程序应该能够为学生添加付款明细,并确保不会注册重复的付款明细。
【问题讨论】:
-
我认为集合类型并不重要。我认为您应该自己对集合执行重复检查,而不是依赖集合来执行此操作。
标签: java
谁能建议我在这种情况下使用哪个集合:
每个学生都有付款历史记录,其中包含学生/家庭付款的详细信息。系统应确保学生账户没有重复付款。该程序应该能够为学生添加付款明细,并确保不会注册重复的付款明细。
【问题讨论】:
标签: java
也许Map<Student, Set<Payment>> 可以。
(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,请确保在您放入集合中的Objects(以及equals)上实现hashCode。
【讨论】:
您可能会发现一组付款的学生地图很有帮助
Map<Student, Set<Payment>> studenthistory;
【讨论】:
你可以考虑例如
Map<Student, HashSet<Payment>> students;
Student 是学生,由姓名或某个 ID 标识。 HashSet<Payment> 是付款。 Payment 包含 ID、金额、日期等。
【讨论】:
Double是一种很糟糕的存币类型。
一套将是您的最佳选择。集合是不包含重复元素的集合。
记住在你的类上重写 equals 方法: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());
}
....或类似的东西:)
【讨论】: