我需要一个数据结构来存储应该由id检索的用户。 我注意到有几个类实现了Map接口。哪一个应该是我的默认选择?他们似乎都与我相当。
答案 0 :(得分:9)
可能这取决于您计划拥有多少用户以及是否需要订购或仅按ID获取单个商品。
HashMap
使用哈希码存储内容,以便您有put
和get
次操作的固定时间,但项目始终无序。
TreeMap
使用二叉树,因此您有基本操作的 log(n)时间,但项目在树中保持有序。
我会使用HashMap
,因为它更简单(记得给它一个合适的初始容量)。请记住,默认情况下,这些数据结构不会同步,如果您打算在多个线程中使用它,请使用ConcurrentHashMap
。
中间方法是LinkedHashMap
使用与HashMap
(hashcode和equals方法)相同的结构,但它还保留了插入地图中的双重链接元素列表(保持插入顺序) 。这种混合物已订购物品(按照插入顺序排列,按照评论的建议......但准确但我已经指明了这一点),没有TreeMap
的性能损失。
答案 1 :(得分:6)
不并发:使用java.util.HashMap
并发:使用java.util.concurrent.ConcurrentHashMap
如果您想对迭代器使用的顺序进行一些控制,请使用TreeMap或LinkedHashMap。
答案 2 :(得分:3)
Java Collections Trail,Implementations页面对此进行了介绍。
答案 3 :(得分:2)
如果它们看起来都相同,那么您还没有阅读文档。 Sun的文档非常简洁,并为您做出选择提供了非常重要的观点。
开始here。
答案 4 :(得分:1)
您的选择可能会被您打算如何使用数据结构以及您希望获得性能的位置(读取或写入)修改?
在用户登录系统中,我的猜测是你会做更多的读取而不是写入。
答案 5 :(得分:0)
(我知道我已经回答了一次,但我觉得这需要说明)
您是否考虑使用数据库存储此信息?即使它是SQLite,也可能比在程序代码中存储用户数据库或每次将整个数据集加载到内存中更容易。