在大多数语言中,它取决于你完成它们后拾取玩具的好处。
在Java中,因为垃圾收集是自动完成的,所以并不需要担心内存泄漏。
好吧,最近,我实际上已经处于这样一种情况:我必须抓住大量的自定义对象,其中集合的大小是应用程序限制因素之一。如果这是你的情况,一些建议 -
最终,最简单的方法就是自己测试。
Hashtables(无论是HashMap还是HashTable)会占用比实际存储信息更多的内存。
哈希表现是有代价的。
正如其他人所指出的那样,你的问题是不明确的。
尽管如此,有时基于ArrayList的实现可以替换基于HashMap的实现(我根本不会考虑Hashtable,它已经过时了)。您可能需要线性搜索ArrayList,但对于可能仍然足够快的小列表而言,ArrayList将需要更少的内存(对于相同的数据),因为它具有更少的开销。
您的问题严重不足,因为您指定的具体数据结构不具有可比性。
HashMap / HashTable具有可比性,因为它们都可以作为映射(键 - >值查找)。 ArrayLists(和一般的列表)没有。
HashMap / HashTable部分很容易回答,因为它们大致相同(主要区别是空键)但前者不同步而后者是,因此HashMap通常会更快(假设不需要同步)现代JVM是尽管如此,在无竞争锁定时速度相当快,因此在微观基准测试中差异会很小。
你不是喜欢比较: HashMap 和 Hashtable 实施 Map 界面,和 ArrayList 实现 List 接口。
HashMap
Hashtable
Map
ArrayList
List
在直接比较之间 Hashtable 和 HashMap , HashMap 可能会提供更好的表现,因为 Hashtable 是同步的。
如果您对使用这些集合的内容给出一些指示,您可能会得到更有见地的答案。
java.util.Collection存储对象的引用。
java.util.Map存储对Map.Entry实例的引用,这些实例保存对键和对象的引用。
因此,持有对对象的N个引用的java.util.Collection将比保存在相同N个引用上的java.util.Map需要更少的内存,因为Map也必须指向键。
读取和写入的性能取决于每个接口的实现。
我没有看到任何类似于WeakHashMap的java.util.Collection。如果您担心垃圾收集和内存泄漏,我会读到关于该类的内容。