Java 在此场景中应使用哪个集合?

Java 在此场景中应使用哪个集合?,java,Java,有谁能建议我在这个场景中使用哪个集合: 每个学生都有一个付款历史记录,包括学生/家庭付款的详细信息。系统应确保学生账户不存在重复付款。该程序应该能够为学生添加付款详细信息,并确保没有注册重复的付款详细信息。当您需要无重复的付款详细信息时,请使用集合。如果使用HashSet,请确保在放入集中的对象上实现hashCode(以及等于)。也许可以使用映射 (A不允许重复。) 如果正确覆盖equals(和hashCode),可以执行以下操作 Map<Student, Set<Payment&g

有谁能建议我在这个场景中使用哪个集合:


每个学生都有一个付款历史记录,包括学生/家庭付款的详细信息。系统应确保学生账户不存在重复付款。该程序应该能够为学生添加付款详细信息,并确保没有注册重复的付款详细信息。

当您需要无重复的付款详细信息时,请使用
集合。如果使用
HashSet
,请确保在放入集中的
对象上实现
hashCode
(以及
等于
)。

也许可以使用
映射

(A不允许重复。)

如果正确覆盖
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.");
}
Map studentPayments=newhashmap();
公共作废addStudentPayment(学生,付款){
如果(!studentPayments.containsKey(学生))
put(student,new HashSet());
if(studentPayments.get(student.add(payments))
System.out.println(“已添加付款”);
其他的
System.out.println(“发现重复项,未添加付款”);
}

您可能会发现学生到一组付款的地图很有用

Map<Student, Set<Payment>> studenthistory;
Map studenthistory;

一套是您的最佳选择。集合是不包含重复元素的集合

请记住在类上重写equals方法:

在您的情况下,它将类似于:

public boolean equals(Object obj) {
    if (!obj instanceof Payment)
        return false;
    }
    Payment p = (Payment) o;
    return p.getId().equals(getId());
}
。。。。或者类似的事情:

< P>你可以考虑例如

Map<Student, HashSet<Payment>> students;
Map学生;

Student
是通过姓名或某个ID标识的学生。
HashSet
是付款。
付款
包含ID、金额、日期等。

我认为收款类型无关紧要。我认为你应该自己对托收进行重复检查,而不是依赖托收。当然,两次付款的金额可以相同。此外,
Double
是一种可怕的货币存储方式。@aioobe:Agree。现在有所改善。这需要我查看您的其他个人/付款类别。此外,我认为你应该为此发布一个新的问题,给出细节。如果你在这里发布问题的链接,我会看一看的。这只是一个就业计划,其中会有一个以学生名义开立的储蓄账户和相关账户。根据他的每月储蓄,相关就业计划账户中会有75%的信用。我想我能给你的最好建议是看看这个问题,如果没有提供足够的信息,请发布一个更具体的后续问题。好的,艾奥贝先生,我会尝试解决这个问题。如果我有什么需要澄清的,我会发布。。。