在Java中,哪个是字典数据结构最推荐的类?

我需要一个数据结构来存储应该由id检索的用户。 我注意到有几个类实现了Map接口。 哪一个应该是我的默认选择? 他们似乎都与我相当。

可能这取决于您计划拥有多少用户,以及您是否需要订购或仅按ID获取单个商品。

HashMap使用哈希代码来存储事物,因此您有持续的putget操作时间,但项目总是无序的。

TreeMap使用二叉树,因此您有基本操作的log(n)时间,但项目在树中保持有序。

我会使用HashMap因为它更简单(记得给它一个合适的初始容量)。 请记住,默认情况下,这些数据结构不会同步,如果您打算在多个线程中使用它,请使用ConcurrentHashMap

中间方法是LinkedHashMap ,它使用与HashMap (hashcode和equals方法)相同的结构,但它还保留了插入到地图中的双重链接元素列表(保持插入顺序)。 这个混合物有订购的项目(按照插入顺序排序,正如评论所建议的那样……只是为了确切但我已经指定了这一点)没有TreeMap性能损失。

没有并发:使用java.util.HashMap

并发:使用java.util.concurrent.ConcurrentHashMap

如果要对迭代器使用的顺序进行某些控制,请使用TreeMap或LinkedHashMap 。

这在Java Collections Trail, Implementations页面中有介绍。

如果它们看起来都相同,那么你还没有阅读文档。 Sun的文档非常简洁,并为您做出选择提供了非常重要的观点。

从这里开始。

您的选择可以通过您打算如何使用数据结构以及您希望在哪里获得性能(读取或写入)来修改?

在用户登录系统中,我的猜测是你将进行更多的读取而不是写入。

(我知道我已经回答了一次,但我觉得这需要说)

您是否考虑过使用数据库存储此信息? 即使它是SQLite ,它也可能比将用户数据库存储在程序代码中或每次将整个数据集加载到内存中更容易。