2010-06-18 73 views
10

免责声明:
这个问题并不是要争辩!在Java中搜索键值对的最快和最有效的方法?

什么是搜索键值对的最快和更少的内存耗尽方式?我会将项存储在关键值之类的关系中,并且我需要快速访问它们。我应该使用SQLite数据库吗?一张地图?一个Hashtable?一个HashMap?请给出使用任何搜索方法的一些优点/缺点。

回答

11

只要密钥的hash function有效,任何基于散列的Map结构都可以使用。您可以使用值ID:s作为查找的结果以在搜索期间节省内存。

如果您的数据已经在数据库中,那么您可以将此搜索完全留给RDBMS,毕竟他们是为这些东西做的。

7

如果你的数据在内存中,Map一般是你的朋友 - 他们是这个意思。但是,请不要使用Hashtable。它比新的Map实现慢得多。因为它的方法是同步的,大部分时间是不需要的(在需要的时候,有一个更好的选择 - 见下文)。

在单线程上下文中,HashMap可能会正常。

如果您需要线程安全,请使用ConcurrentHashMap

+0

在没有任何锁定的情况下,HashTable在单线程环境中不同步并且比ConcurrentHashMap快! 如果对地图的访问是多线程的,那么ConcurrentHashMap确实是最好的解决方案。 – 2010-06-18 12:48:03

+0

@Tobias,“与新的集合实现不同,Hashtable是同步的” - 来自http://java.sun.com/j2se/1.5.0/docs/api/java/util/Hashtable.html – 2010-06-18 13:03:45

+1

因为我们正在谈论关于语义......“ConcurrentHashMap'实现在几乎所有情况下都比'HashMap'执行得更好,它还允许同时进行并发读写操作,并且它支持普通复合操作的方法,否则它们不是线程安全的。部署环境从'ConcurrentHashMap'开始。“ *清洁代码 - 敏捷软件工艺手册,Robert C. Martin,第183页* – Esko 2010-06-18 13:16:26

相关问题