三者均为散列表,区别如下:
1. HashMap为非线程安全的散列表,而HashTable和ConcurrentHashMap均为线程安全的散列表;
2. HashMap的key和value均可以为null,而HashTable和ConcurrentHashMap的key和value均
不可以为null;
3. HashTable是通过给整张散列表加锁的方式来保证线程安全的.这种方式在保证线程安全的同时,大大的降低了线程并发执行效率。ConcurrentHashMap在JDK1.8之前是通过分段锁机制来保证线程安全的;从JDK1.8开始使用乐观锁+Synchronized来保证线程安全。ConcurrentHashMap在不同版本中保证线程安全的方式都实现了在保证线程安全的同时提高了并发执行效率。