免责声明:
本问题不旨在争论!
什么是最快和最省内存的搜索键值对的方法?我将以键值对的方式存储项目,并且需要快速访问它们。我应该使用SQLite数据库吗?映射表?哈希表? HashMap?请提供使用任何搜索方法的优缺点。
Map
结构都是不错的选择,只要你的关键字hash function效率高。在搜索时,您可以使用值ID作为查找结果以节省内存。如果你的数据在内存中,Map
通常是你的好伙伴 - 它们就是为此而设计的。
然而,不要使用Hashtable
。它比新的Map实现慢得多,因为它的方法是同步的,而大多数情况下并不需要同步(当需要同步时,有一种更好的替代方案 - 请参见下文)。
在单线程上下文中,HashMap
可能会很好用。
如果你需要线程安全,请使用ConcurrentHashMap
。
ConcurrentHashMap
的实现在几乎所有情况下都比HashMap
表现更好。它还允许同时并发读写,并且具有支持常见复合操作的方法,否则这些操作是不安全的。如果Java 5是部署环境,请从ConcurrentHashMap
开始。”《代码整洁之道》, 罗伯特·C.马丁, 第183页 - EskoConcurrentHashMap
操作的成本与HashMap
相似。” 它建议在单线程使用时使用HashMap
。 - Péter Török