[面试|Map|红黑树] 网易面试官问HashMap、TreeMap和HashTable的区别,怎么回答?

本文探讨了HashMap、TreeMap和HashTable在Java中的差异和共同点。TreeMap基于红黑树实现,保证了元素的排序性;HashMap与HashTable的主要区别在于线程安全性,HashMap非线程安全,而HashTable则在多线程环境下提供了安全保障。
摘要由CSDN通过智能技术生成

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

不同点
HashMapHashTable说明
无序的无序的
HashMap继承了AbstractMap抽象类HashTable继承了Dictionary抽象类父类不同
HashMap 允许一个空键 (其他的空键会覆盖第一个空键)和 任意数量NULLHashTable 不允许 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()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢前端的后端MelodyJerry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值