【问题标题】:ArrayList vs HashSet vs HashMap and questions regarding data-structure designArrayList vs HashSet vs HashMap 以及有关数据结构设计的问题
【发布时间】:2015-07-16 12:03:59
【问题描述】:

我需要创建 3 个数据结构。

第一个是Persons的集合(PersonRegister):

public Person {
    private final int uniquePersonId; // Unique identifier
    private long personalNumber;
    private String name;
    // additional code
}

第二个是InsuranceRegister的集合(InsuranceRegister):

public Insurance {
    private final int uniqueInsuranceId; // Unique identifier
    private int uniquePersonId; // Is used as a link between the insurance and person
    private Date date;
    private boolean active;
    // additional code
}

第三个是ClaimsRegister的集合:

public Insurance {
    private final int uniqueClaimId; // Unique identifer
    private int uniquePersonId; // Is used as a link between the claim and person
    private Date date;
    // additional code
}

每个对象都覆盖了 equals() 和 hashCode() 方法。

不需要删除任何数据结构,因为旧数据将用于统计等。

数据结构不包含重复项也很重要。

将用于这些数据结构的方法例如:

  • 查找特定 personId 的保险/索赔。
  • 查找在给定时间范围内提交的所有索赔/保险。
  • 根据 personId 或 personalNumber 查找人员
  • 查找所有具有特定姓氏的人
  • 查找特定人员的所有有效保险。
  • 查找特定子类类型的所有保险/索赔(例如 CarInsurance 或 HomeInsurance,两者都是 Insurance 的子类)

列表一直持续到您命名为止。适合综合统计和搜索功能的任何类型的数据。

其中很多方法将使用带有迭代器的高级 for 循环。

就目前而言,将 Person 与其保险联系起来的唯一方法是 通过将 uniquePersonId 变量相互比较。可不可能是 最好让每个人都拥有一个包含对象引用的列表 其保险和索赔?

另外让每个保险/索赔都有一个对其的对象引用 父母/所有者?或者这被认为是不好的做法,被“分离 担忧”?

它会生成诸如确定 boolean totalCustomer(True if you have 超过 3 个有效保险)更容易放置在人体内 班级。有什么建议吗?

无论如何,对于主要问题。哪些集合最适合每种数据结构? (仅限于 Java 集合)

目前/暂时我有 3 个带有 if(!list.contains(newElement)) { add(newElement) }; 的 ArrayLists防止重复。

遍历 for 循环时,ArrayList 不是比 HashSet 或 HashMap 快吗?但它的速度是否足够快以至于有价值?

考虑到不允许重复,我一直认为 HashSet 会是更好的做法,还是我的“重复解决方案”足够好? HashMap 对考虑到每次搜索保险或索赔时都会使用 uniquePersonId 的人来说可能是有意义的。

但是,我仍然想要搜索personalNumber 或任何其他人的功能。像Iterate through a HashMap 这样的迭代是否仍然足够有效,并有助于进行良好的编程设计?

我在 stackoverflow 和 google 上花费了无数小时试图弄清楚这一点。任何建议和帮助将不胜感激。谢谢。

编辑:Difference between HashSet and HashMap? 被链接为可能的重复问题,但是该线程仅解释了 HashSet 和 HashMap 之间的区别,并带有 Oracles Collection 教程的链接。我知道大多数差异。我还阅读了 Collection 教程。但是由于结构的广泛使用,我仍然很难找到最合适的集合。我的主要目标是关于最佳数据结构设计的要素。对不起,如果我不清楚。

【问题讨论】:

标签: java arraylist data-structures hashmap hashset


【解决方案1】:

我建议使用 HashSet 来存储各种对象的列表。还要让您的对象(Person 等)实现 Comparable,这样您就可以覆盖 compareTo 方法并将其用于对 HashSet 进行排序。在排序方面,您可以简单地使用 Collections.sort() 方法,该方法也可以使用 Comparator 进行自定义排序。

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2011-01-25
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多