【问题标题】:Which collection should be used in this scenario?在这种情况下应该使用哪个集合?
【发布时间】:2011-09-05 19:13:07
【问题描述】:

谁能建议我在这种情况下使用哪个集合:

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

【问题讨论】:

  • 我认为集合类型并不重要。我认为您应该自己对集合执行重复检查,而不是依赖集合来执行此操作。

标签: java


【解决方案1】:

也许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.");
}

【讨论】:

  • 这需要我查看您的其他人/付款类别。此外,我认为您应该为此发布一个新问题,并提供详细信息。如果您在此处发布问题的链接,我会看一下。
  • 它只是一个就业计划,其中将以学生的名义开设储蓄账户和相关账户。根据他每月的储蓄,相关就业计划将获得75%的信用帐户。
  • 我认为我能给您的最佳建议是查看this 问题,如果没有提供足够的信息,请发布更具体的后续问题。
  • 好的,aioobe 先生,我会努力解决这个问题..如果我有什么要澄清的,我会发布......
【解决方案2】:

只要您要求不重复,请使用Set。如果您使用HashSet,请确保在您放入集合中的Objects(以及equals)上实现hashCode

【讨论】:

    【解决方案3】:

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

    Map<Student, Set<Payment>> studenthistory;
    

    【讨论】:

      【解决方案4】:

      你可以考虑例如

      Map<Student, HashSet<Payment>> students;
      

      Student 是学生,由姓名或某个 ID 标识。 HashSet&lt;Payment&gt; 是付款。 Payment 包含 ID、金额、日期等。

      【讨论】:

      • 当然,两次付款的金额可以相同。另外Double是一种很糟糕的存币类型。
      • @aioobe:同意。现在改进了。
      【解决方案5】:

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

      记住在你的类上重写 equals 方法: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());
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 2023-03-16
        • 2014-01-24
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        相关资源
        最近更新 更多