我需要列出一个人和他们到达聚会的时间列表,当他们离开时我需要将他们从这个列表中删除。 (党的最高人数是150)
Set会告诉我,在任何情况下我都不会两次添加同一个人。
列表将为我提供灵活性,以很少的空格开始列表(如果没有人出现)。
阵列(不确定它们提供的是什么)但我经常使用它们。
我的想法是创建2个数组,其中包含名称和时间。当有人进来时,我将名字保存在另一个中,而将时间保存在另一个上。当他/她离开时我搜索他/她的名字,删除它并使用相同的索引删除另一个数组上的时间。
一个列表可以有一个包含2个元素的数组,然后我只需要将它添加到一个位置,但搜索会更复杂。
或许我太复杂了?
答案 0 :(得分:5)
地图实施:
public final class Person
{
... remainder left to the student ...
}
Map<Person, Date> currentPartyAttendees; // date is arrival time.
设置实施:
public final class PartyAttendee
{
... person details ...
Date arrive;
int hashcode()
{
... use Apache HashCodeBuilder ...
}
boolean equals(Object other)
{
... implementation left to student. Use Apache EqualsBuilder ...
}
}
Set<PartyAttendee> currentPartyAttendees;
答案 1 :(得分:1)
使用HasMap会适合您的目的,因为您可以使用此人的姓名作为键来为该人添加和检索该条目,并且它提供恒定的时间性能,因此无论该集的增长程度如何,性能都应该如此保持一致。
答案 2 :(得分:1)
答案 3 :(得分:1)
只需使用列表&lt;&gt;以及表示来宾的数据结构。 子类列表标记到达和离开时间以及添加/删除方法。你也可以使用set,但是你必须生成一个hashCode和equals方法。我不确定你是否想这样做,因为人们可能有相同的名字(除非你有其他数据,如SSN,bday,中间名等)
public Class Guest{
private String firstName, lastName;
private long arrivalTime, departureTime;
....
}
public class MyGuests extends ArrayList<Guest>{
@Overide
public void add(Guest g){
//record arrival time here
super.add(g)
}
@Overide
public void remove(Guest g){
//record departure time here
super.remove(g);
}
}
答案 4 :(得分:0)
我认为你也可以使用数组,而是使用两个数组,使用一个'Person'模型数组,它包含人名,到达时间和离开时间。在数组上插入之前,您可以验证列表是否已包含此人。
ps:不要忘记在模型中覆盖equals()和hashCode()
答案 5 :(得分:0)
LinkedHashMap - 一个键值对的容器,用于维护其插入顺序。关键是人(简单的String
或指定的类),价值是到达时间,例如Date
。