首页 > 知道HashMap、TreeMap和HashTable区别吗
头像
不打工就没饭吃喔
发布于 2021-05-04 13:48
+ 关注

知道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()方法

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

热门推荐