HashTable,HashMap和TreeMap之间有什么区别?
浅谈一下,分别从底层结构,线程是否安全,是否允许为空值以及常用性来说。
1.底层结构对比:
HashTable底层是哈希表,HashMap底层是数组+链表,且在jdk1.8后引入了红黑树,相对于HashTable来说,HashMap的常用性更高。
TreeMap的底层是红黑树结构,它所提供的是顺序访问。所以在这三种中,如果是要按顺序遍历来说,它的效率是很高的。
2.线程时候安全方面
HashTable和HashMap都是线程不安全的。
TreeMap的线程是安全的。
3.是否允许空值。
Map实现类 | KEY | VALUE |
HashMap | 允许为Null | 允许为Null |
TreeMap | 不允许为Null | 允许为Null |
ConcurrentMap | 不允许为Null | 不允许为Null |
HashTable | 不允许为Null | 不允许为Null |
总结:HashTable是由早期的java类库提供的一个由哈希表实现的,本身是同步的,且不支持null值,由于性能同步,导致了由额外的性能消耗,现在已很少使用。HashMap为三者中最为常用的,它又支持null值和null键,当你对线程的安全要求不是太高时,它是你最好的选择。TreeMap当你需要顺序遍历时,它是以最好的选择。但是注意,一般情况下它的性能不如HashMap,所以如果你对性能要求很高的时候,请谨慎选择。
//注:本人可能由于学习不精,导致文章中出现错误,如有发现,欢迎指导批评,感激不尽。