HashMap、Hashtable、 TreeMap、WeakhashMap的区别

一、HashMap与HashTable的区别

    首先HashMap(java1.8后HashMap使用数组加链表或数组加红黑树组成)和Hashtable都使用数组加链表的方式进行实现,同时具有数组和链表的特点。

    1、HashMap可以理解为是Hashtable的一个轻量级非线程安全的实现,HashMap允许一个null的key值,而Hashtable不允许

    hashmap中实现的hashtable的方法都是没有加synchronized关键字的,所以性能较高,但是为非线程安全的(此处需要关注之前写的HashMap源码手写实现和ConcurrentHashMap实现原理)。HashMap的线程非安全主要表现在HashMap进行扩容的时候,可能链表会形成环型,所以next()方法永远不能到达而照成CPU的100%(但是不影响接受新的请求,只是会形成多个环形,最后崩溃)。但是Hashtable使用Synchronized关键字保证线程安全的代价是性能特别的低,基本上也不能接受,一般使用ConcurrentHashMap(采用分段锁实现)进行替代。

    2、HashMap将Hashtable的contains方法修改为contaisKey和containsValue方法实现,没有歧义

    3、Hashtable实现枚举,而HashMap使用iterator

    4、两者使用的hash和rehash算法类似,性能差距不大

    5、Hashtable和HashMap的初始化长度和扩容方式不同

    Hashtable的默认初始化数组长度为11,并且扩容的时候为原来的两倍,而HashMap的初始化数组长度为16,并且动态扩容的长度为2的倍数。

    6、Hash值的使用方式不同,Hashtable直接使用了对象的HashCode值

 

二、TreeMap

    TreeMap使用红黑二叉树方式实现,与上两者完全不同。并且TreeMap实现了SortedMap,所以存取数据会按照可以进行排序(可自定义排序)。所以应该场景为需要按照key进行排序时候,具体后面会单独介绍TreeMap。

三、LindHashMap

    LinkedHashMap是HashMap的一个子类,若需要存放和获取具有相同的顺序则可以使用LinkedHashMap(应用场景)。

四、WeakHashMap

WeakHashMap与HashMap区别在于WeakHashMap的key使用弱引用,若key不再被依赖,则会被垃圾回收器进行回收,而HashMap的key使用强引用,只有没有gcroot指向时才会被回收。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值