2011-09-05 146 views
2

任何人都可以建议我在这种情况下使用哪个集合:在这种情况下应该使用哪个集合?

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

+2

我不认为集合类型会起作用。我认为你应该自己对集合执行重复检查,而不是依赖集合来完成。 – Rup

回答

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."); 
} 
+0

你能帮我给这个 – satheesh

+0

哈希码,这需要我看看你的人/付款clasess的其余部分。此外,我认为你应该为此提出一个新问题,提供细节。如果你在这里发布一个问题的链接,我会看看它。 – aioobe

+0

它只是一个就业计划,其中将以学生的名义开设储蓄账户和相关账户。并且根据他每月节省的金额,在相关的就业计划账户中将获得75%的信贷。 – satheesh

3

只要你有没有重复的要求,使用Set。如果您使用的是HashSet,请确保将hashCode放在您放入集合中的Objects(还有equals)。

1

您可能会发现一个Map的学生一组对付款有帮助

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

一组将是​​您的最佳选择。一个集合是一个不包含重复元素的集合。

只记得覆盖上您的课等号方法: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()); 
} 

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

1

你可以考虑eg

Map<Student, HashSet<Payment>> students; 

Student是学生,通过名称或某些ID标识。 HashSet<Payment>是付款。 A Payment包含ID,金额,日期等。

+0

当然两次付款可以是相同的金额。此外,'Double'是储存货币的可怕类型。 – aioobe

+0

@aioobe:同意。现在改进了。 – Jiri

相关问题