我有一个问题陈述:假设有Employee
类,并且必须设计一个类,它提供了访问和添加员工的get和put方法。 Employee
类是第三方类,因此我们无法对其进行更改。有一个内存限制,例如可以存储最多50,000名员工。现在,如果在添加员工时达到内存限制,则按照以下任一方法删除一名员工并添加新员工:
我可以考虑采用两个哈希图: - 一个用于存储员工对象,另一个用员工键,时间戳或频率为值。
但这不是最佳解决方案。请提供有关哪些数据结构可用于解决此问题的宝贵建议。
答案 0 :(得分:0)
只需使用普通集合来存储您的员工。添加新员工并检测到内存已满时,您只需确定具有最小排序顺序条件的员工,并将其从数据库中删除。
由于你没有提供Employee类,我在这里声明了一个例子:
class Employee {
int frequency;
Instant lastAccess;
}
您的数据库(也可以是LinkedList):
private List<Employee> myDatabase = new ArrayList<>();
评估具有最小标准的员工的组件(第一个频率进行比较,如果等于lastAccess,则进行比较:
public int compare( Employee emp1, Employee emp2 )
{
int result = emp1.frequency - emp2.frequency;
if ( result == 0 )
{
result = emp1.lastAccess.compareTo( emp2.lastAccess );
}
return result;
}
这里主要是&#39;将新员工插入数据库的方法(isMemoryFull的实现留给您):
private void insertEmp( Employee emp)
{
if ( isMemoryFull() )
{
Employee minEmp = myDatabase.stream().min( this::compare ).get();
myDatabase.remove( minEmp);
}
myDatabase.add( emp );
}
注意:这适用于Java8 lambdas和流。对于java&lt; 8你必须正式将比较方法作为Comparator实现,并使用Collections.sort而不是stream()。min()方法。