知道HashMap、TreeMap和HashTable区别吗

HashMap、TreeMap和HashTable的区别

Map接口有三个比较重要的实现类,分别是

  • TreeMap
  • HashMap
  • HashTable

TreeMap

  • 有序的
  • 线程不安全
  • TreeMapSortedMap实现类
  • 基于红黑树
    • 每个key-value对作为红黑树的一个节点
    • 没有调优选项,因为该树总是处于平衡状态
    • 存储key-value对时,需要根据key节点进行排序(两种排序方式)
      • 自然排序TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则会抛出ClassCastException
      • 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序

HashMap & HashTable

不同点

HashMap HashTable 说明
无序的 无序的
HashMap继承了AbstractMap抽象类 HashTable继承了Dictionary抽象类 父类不同
HashMap 允许一个空键 (其他的空键会覆盖第一个空键)和 任意数量NULL HashTable 不允许 NULL值(包括键或值) <key, value>NULL区别
方法是异步的(即,线程不安全,效率较高) 方法是同步的(即,线程安全的,效率较低) HashTableHashMap最主要的区别。
如果对同步性没有要求,建议使用HashMap
HashTable的源码,除构造函数外,HashTable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。
HashMap去掉了HashTablecontains()方法,但是加上了containsValue()containsKey()方法
HashMaphash数组的默认大小是16,而且一定是2的指数 HashTablehash数组默认大小是11,增加的方式是 old * 2 + 1

相同点

HashMap & HashTable
HashMapHashTable的底层实现都是数组 + 链表实现
HashMapHashTable的数据元素是无序的
为了成功地在HashMapHashTable中存储和获取对象,用作key的对象必须实现hashCode()方法和equals()方法
#2021届秋招进度交流##Java##学习路径#
全部评论
HashMap里的方法不是异步的,只不过线程不安全。不过早就不推荐使用HashTable了,多线程环境一般推荐用ConcurrentHashMap。 效率这个问题: HashTable多一个加解锁过程,理论上可能会慢一些。 还有一个区别是HashTable没有链表转红黑树的优化。
1 回复
分享
发布于 2021-05-04 15:59
不知道也无所谓哈哈哈
点赞 回复
分享
发布于 2021-05-04 19:51
百信银行
校招火热招聘中
官网直投
楼主有点搞不清楚异步和同步的区别哈。异步指的是当遇到一个阻塞方法时,会去调用其他方法直到阻塞方法结束,一般用来解决获取结果需要一定时间的问题。同步就可以看做是顺序执行。😂
点赞 回复
分享
发布于 2021-05-09 19:41

相关推荐

4 13 评论
分享
牛客网
牛客企业服务