Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList vs HashSet vs HashMap以及有关数据结构设计的问题_Java_Arraylist_Data Structures_Hashmap_Hashset - Fatal编程技术网

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

Java ArrayList vs HashSet vs HashMap以及有关数据结构设计的问题,java,arraylist,data-structures,hashmap,hashset,Java,Arraylist,Data Structures,Hashmap,Hashset,我需要创建3个数据结构 第一个是人员集合(人员登记): 第二种是保险集合(保险登记簿): 第三个是索赔集合(索赔登记): 每个对象都重写了equals()和hashCode()方法 由于旧数据将用于统计等,所以不需要删除任何数据结构 数据结构不包含重复项也很重要 将在这些数据结构上使用的方法包括: 查找特定人员的保险/索赔ID 查找在给定时间范围内提交的所有索赔/保险 根据personId或personalNumber查找一个人 查找具有特定姓氏的所有人员 查找特定人员的所有有效保险 查找特定

我需要创建3个数据结构

第一个是人员集合(人员登记):

第二种是保险集合(保险登记簿):

第三个是索赔集合(索赔登记):

每个对象都重写了equals()和hashCode()方法

由于旧数据将用于统计等,所以不需要删除任何数据结构

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

将在这些数据结构上使用的方法包括:

  • 查找特定人员的保险/索赔ID
  • 查找在给定时间范围内提交的所有索赔/保险
  • 根据personId或personalNumber查找一个人
  • 查找具有特定姓氏的所有人员
  • 查找特定人员的所有有效保险
  • 查找特定子类类型的所有保险/索赔(例如,CarInsurance或HomeInsurance,两者都是保险的子类)
这个名单一直持续到你给它命名为止。适合全面统计和搜索功能的任何类型的数据

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

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

此外,每个保险/索赔都有一个对象引用其 父母/所有者?还是被“分离”视为不良做法 关注的问题“

它将生成一些方法,例如确定布尔totalCustomer(如果您有 超过3种主动保险)更容易放置在人体内 班级。有什么建议吗

总之,要回答主要问题。哪些集合最适合每个数据结构?(仅限于Java集合)

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

在遍历for循环时,ArrayList不是比HashSet或HashMap更快吗?但它是否足够快,足以产生价值

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

然而,我仍然希望搜索personalNumber或任何其他成员的功能。这样的迭代是否仍然足够有效,并有利于良好的编程设计

我在stackoverflow和google上花了无数个小时试图解决这个问题。如有任何建议和帮助,将不胜感激。谢谢


编辑:被链接为可能重复的问题,但是该线程仅解释HashSet和HashMap之间的区别,并链接到Oracles Collection教程。我知道其中的大部分差异。我还阅读了《收藏教程》。但由于结构的广泛使用,我仍然很难找到最合适的集合。我的主要目标是考虑如何实现最佳的数据结构设计。如果我不清楚,很抱歉。

我建议使用哈希集存储各种对象的列表。还要使对象(Person等)实现可比较,这样您就可以重写compareTo方法并使用它对哈希集进行排序。说到排序,您可以简单地使用Collections.sort()方法,该方法还可以使用一个比较器进行自定义排序

可能重复的
public Person {
    private final int uniquePersonId; // Unique identifier
    private long personalNumber;
    private String name;
    // additional code
}
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
}
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
}