我需要创建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()方法。
非数据结构将需要任何删除,因为旧数据将用于统计等。
数据结构不包含重复项也很重要。
将在这些数据结构上使用的方法例如:
列表一直持续到你命名它为止。任何类型的数据都适合全面的统计和搜索功能。
很多这些方法都将使用带迭代器的高级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教程。但由于结构的广泛使用,我仍然在寻找最合适的系列时遇到一些困难。我的主要目标是如何为最佳数据结构设计做出贡献。对不起,如果我不清楚。
答案 0 :(得分:0)
我建议使用HashSet来存储各种对象的列表。还可以使您的对象(Person等)实现Comparable,这样您就可以覆盖compareTo方法并使用它来对HashSet进行排序。在排序时,您可以简单地使用Collections.sort()方法,该方法也可以使用Comparator进行自定义排序。