簡體   English   中英

在這種情況下應該使用哪個集合?

[英]Which collection should be used in this scenario?

任何人都可以建議我在這種情況下使用哪個集合:

每位學生都有一份付款記錄,其中包含學生/家庭的付款詳情。 系統應確保沒有針對學生帳戶的重復付款。 該計划應該能夠為學生添加付款詳細信息,並確保沒有注冊重復的付款細節。

也許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上實現hashCode (以及equals )。

您可能會發現學生地圖對一組付款有幫助

Map<Student, Set<Payment>> studenthistory;

你可以考慮例如

Map<Student, HashSet<Payment>> students;

Student是學生,通過姓名或某些身份證明。 HashSet<Payment>是付款。 Payment包含ID,金額,日期等。

套裝將是您的最佳選擇。 集合是不包含重復元素的集合。

請記住在您的班級上覆蓋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());
}

.... 或類似的東西 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM