Hashtable:
1.Hashtable的几乎所有函数都是同步的,所以其线程是安全的,因为其里面的方法被synchronized修饰
2.不允许空(null)值和空(null)键
3.底层结构是:数组+单向链表
4.Hashtable默认的容量大小是11;在进行扩容的时候,每次将容量变为“初始容量x2 + 1”。
5.Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历
6.Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。
7.效率高一些
HashMap:
1.HashMap的函数是不同步的,所以其线程是不安全的
2.允许空(null)值和空(null)键
3.底层结构是:数组+单向链表+红黑树,单向链表主要是解决Hash冲突而存在的
4.HashMap默认的容量大小是16;在进行扩容的时候,每次将容量变为“初始容量x2”。
5.HashMap只支持Iterator(迭代器)遍历。
6.HashMap添加元素时,是使用自定义的哈希算法。
7.效率较低
添加:
最后如何实现HashMap的同步(让其变成线程安全的),有两种方法
一:可以通过静态方法
Map m =Collections.synchronizedMap(new HashMap())
二:
直接可以使用JDK 5.0之后提供的java.util.concurrent包里的ConcurrentHashMap类。