如何从列表中检索特定的emp对象而不循环数据结构

时间:2010-06-28 06:37:56

标签: java core

我在数据库中有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
}

1 个答案:

答案 0 :(得分:0)

1)我会基于散列图而不是列表来实现缓存:

Map cache = new HashMap<Integer, Employee>();

这样,您可以非常有效地按给定ID检索Employee对象。

此外,我不会为员工ID添加setter,因为它可能会破坏映射。考虑仅通过构造函数参数设置id。

- 编辑 -

如果必须使用清单:

2)您可能希望先对其进行排序。这将允许执行二进制搜索(请参阅Collections.binarySearch(..)方法)。这需要实现ComparatorComparable接口,以便定义Employee对象之间的顺序。此外,每次要执行搜索时,都必须创建一个具有所需id的虚拟Employee对象。

3)如果性能不是问题,只需使用List.indexOf(..)即可。这需要在Employee类中实现equals(..)方法。

4)为了在没有循环的情况下真正做到这一点,你可以创建一个稀疏列表,其中包含在索引N处具有id N的Employee。这仅在Employee id值范围不是太大时才可行。好处是最佳的检索时间。