访问此对象的最快方法

Che*_*tah 0 java collections data-structures

假设我有一个1,000,000个用户的列表,其唯一标识符是他们的用户名字符串.因此,为了比较两个用户对象,我只是重写compareTo()方法,比较用户名成员.

给定一个用户名字符串,我希望User从列表中找到该对象.在一般情况下,这是最快的方法.

我猜测HashMap,将用户名映射到User对象,但我想知道是否还有其他一些我不知道哪些会更好.

Boz*_*zho 6

如果您不需要将它们存储在数据库中(这是通常的情况),HashMap<String, User>那么它可以正常工作 - 它具有O(1)查找的复杂性.

如上所述,通常的情况是将它们放在数据库中.但为了获得更快的结果,使用了缓存.您可以使用EhCache - 它类似于ConcurrentHashMap,但它具有元素的生存时间和分布在多台机器上的选项.

您不应该将整个数据库转储到内存中,因为它很难同步.您将面临使地图中的条目无效并使其保持最新的问题.缓存框架使这一切变得更容易.另请注意,数据库有自己的优化,并且您的用户不可能保留在内存中以便更快地访问.