07-HashTable和HashMap的区别

1、HashMap和HashTable的区别

  • 区别
    • ①、HashMap是非线程安全的,HashTable是线程安全的
    • ②、HshMap的键和值都允许 null 值存在,而HashTable则不行
    • ③、因为线程安全问题,HashMap效率比HashTable要
    • ④、HashTable是同步的,而HashMap不是;因此,HashMap更适合单线程环境,HashTable适合多线程环境
      • 不过现在不建议用HashTable,一方面是HashTable是遗留类,内部的实现很多没有优化和冗余另一个方面是,即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable

2、补充:HashTable和ConcurrentHashMap的区别

  • HashTable使用的是Synchronized关键字修饰,ConcurrentHashMap是JDK1.7使用了锁分段技术来保证线程安全JDK1.8ConcurrentHashMap取消了Segment分段锁,采用了CAS和sychronized来保证并发安全
  • ConcurrentHashMap数据结构跟HashMap1.8的结构类似,数组 + 链表/红黑二叉树
  • synchronized只锁定当前链表或红黑树二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍
posted @ 2022-08-02 13:56  OnlyOnYourself-Lzw  阅读(24)  评论(0编辑  收藏  举报