ArrayList vs HashSet vs HashMap以及有关数据结构设计的问题

时间:2015-05-06 11:21:26

标签: java arraylist data-structures hashmap hashset

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

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

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

第二个是保险集合(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或personalNumber
  • 查找某人
  • 查找具有特定姓氏的所有人
  • 查找特定人员的所有有效保险。
  • 查找特定子类型的所有保险/索赔(例如CarInsurance或HomeInsurance,两者都是保险的子公司)

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

很多这些方法都将使用带迭代器的高级for循环。

  

现在,将人与保险联系起来的唯一方法是   通过将uniquePersonId变量相互比较。可不可能是   最好还让每个Person拥有一个带有对象引用的List   它的保险和索赔?

     

此外,每个保险/索赔都有一个对象引用   家长/所有者?或者这被认为是不好的做法,通过“分离”   关注的问题“?

     

它会产生诸如确定boolean totalCustomer之类的方法(如果你有,则为True)   超过3个有效保险)更容易放入人员   类。有什么建议吗?

无论如何,主要问题。什么样的集合最适合每个数据结构? (仅限Java Collections)

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

迭代for循环时,ArrayList不比HashSet或HashMap快吗?但它是否足够快到有价值?

我一直在想HashSet是一个更好的实践,考虑到不允许重复,或者我的“重复解决方案”是否足够好?考虑到每次搜索保险或索赔时都会使用uniquePersonId,HashMap对于人员有意义。

但是,我仍然希望搜索personalNumber或任何其他成员的功能。像Iterate through a HashMap这样的迭代是否仍然足够有效,并且可以进行良好的编程设计?

我在stackoverflow上花了无数个小时,谷歌试图解决这个问题。任何建议和帮助将非常感谢。感谢。

编辑:Difference between HashSet and HashMap?尽可能链接重复的问题,但是该线程只解释了HashSet和HashMap之间的区别,并带有指向Oracles Collection教程的链接。我知道大部分的差异。我还阅读了Collection教程。但由于结构的广泛使用,我仍然在寻找最合适的系列时遇到一些困难。我的主要目标是如何为最佳数据结构设计做出贡献。对不起,如果我不清楚。

1 个答案:

答案 0 :(得分:0)

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