【发布时间】:2011-03-05 08:13:04
【问题描述】:
免责声明:
这个问题不是用来争论的!
搜索键值对的最快且内存消耗更少的方法是什么?我将把项目存储在一个键值之类的关系中,我需要快速访问它们。我应该使用 SQLite 数据库吗?一张地图?哈希表?哈希表?请给出使用任何搜索方法的一些优点/缺点。
【问题讨论】:
免责声明:
这个问题不是用来争论的!
搜索键值对的最快且内存消耗更少的方法是什么?我将把项目存储在一个键值之类的关系中,我需要快速访问它们。我应该使用 SQLite 数据库吗?一张地图?哈希表?哈希表?请给出使用任何搜索方法的一些优点/缺点。
【问题讨论】:
只要您的密钥hash function 有效,任何基于哈希的Map 结构都是可行的。您可以使用值 id:s 作为查找的结果,以在搜索期间节省内存。
如果您的数据已经在数据库中,那么您可以将此搜索完全留给 RDBMS,毕竟它们是为这些东西而设计的。
【讨论】:
如果你的数据在内存中,Maps 通常是你的朋友——他们就是为此而生的。
但是不要使用Hashtable。它比较新的 Map 实现慢得多。因为它的方法是同步的,大多数时候不需要(并且在需要时,有一个更好的选择 - 见下文)。
在单线程上下文中,HashMap 可能会没问题。
如果您需要线程安全,请使用ConcurrentHashMap。
【讨论】:
ConcurrentHashMap 实现几乎在所有情况下都比HashMap 执行得更好。它还允许同时并发读取和写入,并且它具有支持常见的方法否则不是线程安全的复合操作。如果 Java 5 是部署环境,请以 ConcurrentHashMap 开头。” 清洁代码 - 敏捷软件工艺手册,Robert C. Martin,第 183 页
ConcurrentHashMap 的操作成本与HashMap 的操作成本相似”。它建议将HashMap 用于单线程。