我在数据库中有65000个员工记录。我正在检索所有记录并将其作为员工对象存储在列表中作为缓存。当客户在浏览器中输入emp id时,应该在一个条件下从列表中提取记录,而不循环遍历列表。我们怎样才能实现它。
使用indexOf(Object)我们可以通过实现equals方法来实现,但是应该采用什么样的业务逻辑。请让我知道您的观点。
class Employee
{
private int id;
private String name;
Private String address;
public void setAddress (){}
public void setId(){}
public void setName(){}
// simillarly getMethods
}
答案 0 :(得分:0)
1)我会基于散列图而不是列表来实现缓存:
Map cache = new HashMap<Integer, Employee>();
这样,您可以非常有效地按给定ID检索Employee对象。
此外,我不会为员工ID添加setter,因为它可能会破坏映射。考虑仅通过构造函数参数设置id。
- 编辑 -
如果必须使用清单:
2)您可能希望先对其进行排序。这将允许执行二进制搜索(请参阅Collections.binarySearch(..)方法)。这需要实现Comparator或Comparable接口,以便定义Employee对象之间的顺序。此外,每次要执行搜索时,都必须创建一个具有所需id的虚拟Employee对象。
3)如果性能不是问题,只需使用List.indexOf(..)即可。这需要在Employee类中实现equals(..)方法。
4)为了在没有循环的情况下真正做到这一点,你可以创建一个稀疏列表,其中包含在索引N处具有id N的Employee。这仅在Employee id值范围不是太大时才可行。好处是最佳的检索时间。