在这种情况下应该使用哪个集合?

时间:2011-09-05 19:13:07

标签: java

任何人都可以建议我使用哪种收集方案:

每位学生都有一份付款记录,其中包含学生/家庭付款的详细信息。系统应确保没有针对学生帐户的重复付款。该计划应该能够为学生添加付款详细信息,并确保重复的付款详细信息未被注册。

5 个答案:

答案 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());
}

....或类似的东西:)