在我们的代码开发中,Map键值对集合是我们经常使用的数据存储结构,他用着O(1)的查询时间复杂度,为我们的查询操作提供了优质的效率。
1.Map
1.1 HashMap与HashTable的区别
- 线程是否安全:
HashMap
是非线程安全的,Hashtable
是线程安全的,因为Hashtable
内部的方法基本都经过synchronized
修饰。(如果要保证线程安全最好使用ConcurrentHashMap
) - 效率:因为线程安全的问题,
HashMap
要比Hashtable
效率高一点。另外,Hashtable
基本被淘汰,不要在代码中使用它 - 对NULL key和NULLvalue的支持:
HashMap
可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;Hashtable 不允许有 null 键和 null 值,否则会抛出NullPointerException
- 初始容量大小和每次扩容大小的不同:
- 底层数据结构: