【Java容器】(6)TreeMap、LinkedHashMap、Hashtable、WeakHashMap

TreeMap

  1. 底层实现是红黑树
  2. Put方法的实现:
    (a) 如果TreeMap是空的,直接插入为根节点
    (b) 否则就要确定插入位置。如果指定了Comparetor,那么直接使用Comparetor来决定插入位置,如果没指定比较器,则会认为Key实现了Comparable接口,直接调用Key的CompareTo方法,如果Key没有实现Comparable,那么会抛出ClassCastException异常。
    (c) 插入完成后,修复红黑树。

LinkedHashMap

  1. Java8之前,使用环形链表维护每个键值对的引用,记录键值对的插入顺序,Java8使用双向链表

Hashtable

  1. 与HashMap作用相同,主要有两点区别:HashMap是线程不安全的,Hashtable是线程安全的;Hashtable不能存放null作为key,HashMap会把null key 存放在下标为0的位置。
  2. Hashtable基本已经被弃用,因为和Vector、Stack类似,采用了大量synchronized方式实现多线程安全,在大并发量的情况下效率比较低下,Java专门引入了在大并发量情况下使用的并发容器,这种容器由于在实现的时候采用了更加细粒度的锁,因此在大并发量下有着更好的性能表现。

WeakHashMap

  1. 特点:存入其中的键值对,如果key没有外部的强引用,那么在垃圾回收的时候,该键值对会被移除掉。
  2. 实现方式:WeakHashMap维护了一个ReferenceQueue,当某个弱引用被GC回收时,这个弱引用会被添加到ReferenceQueue中,清除无强引用键值对的方法是expungStaleEntries,该方法遍历ReferenceQueue中的每一个key,然后删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值