任何人都可以建议我使用哪种收集方案:
每位学生都有一份付款记录,其中包含学生/家庭付款的详细信息。系统应确保没有针对学生帐户的重复付款。该计划应该能够为学生添加付款详细信息,并确保重复的付款详细信息未被注册。
答案 0 :(得分:5)
也许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.");
}
答案 1 :(得分:3)
每当您要求不重复时,请使用Set
。如果您使用HashSet
,请确保在您放入集合中的hashCode
(以及Objects
)上实施equals
。
答案 2 :(得分:1)
您可能会发现学生的地图有一组付款
Map<Student, Set<Payment>> studenthistory;
答案 3 :(得分:1)
您可以考虑例如。
Map<Student, HashSet<Payment>> students;
Student
是学生,由姓名或某个ID标识。 HashSet<Payment>
是付款。 Payment
包含ID,金额,日期等。
答案 4 :(得分:0)
套装将是您的最佳选择。集合是一个不包含重复元素的集合。
请记住在您的课程上覆盖equals-method: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());
}
....或类似的东西:)