HashMap、weakHashMap、LinkedHashMap和TreeMap四者区别与联系

本文深入探讨了Java集合框架中的四种主要类型:HashMap, weakHashMap, LinkedHashMap 和 TreeMap 的特性及应用场景。详细介绍了每种数据结构的特点,如键值类型、线程安全性、遍历顺序等,并解释了它们的内部实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.HashMap

特性:

1.HashMap是基于Key-Value的散列表(JDK7:数组+链表,JDK8:数组+链表+红黑树),采用拉链法实现的。一般用于单线程当中,非线程安全,HashMap的键是"强键"。

2.继承于抽象类AbstractMap,并且实现Map接口。遍历时,取得的数据完全是随机的。

3.默认容量大小是16,加载因子是0.75。

4.最多只允许一条key为Null,允许多条value为Null。

5.HashMap实现了Cloneable和Serializable接口,而WeakHashMap没有。

1).HashMap实现Cloneable,说明它能通过clone()克隆自己。

2).HashMap实现Serializable,说明它支持序列化,能通过序列化去传输。

6.添加、删除操作时间复杂度都是O(1)。

二.weakHashMap

特性:

1.weakHashMap是基于Key-Value的散列表(数组+链表),采用拉链法实现的。一般用于单线程当中,非线程安全,weakHashMap中的键是"弱键"。

备注:当"弱键"被GC会收时,它对应的键值也会从weakHashMap中删除。

2.继承于抽象类AbstractMap,并且实现Map接口。

3.默认容量大小是16,加载因子是0.75。

4.最多只允许一条key为Null,允许多条value为Null。

三.LinkedHashMap

特性:

1.LinkedHashMap是基于双向链表散列。

2.遍历时按照插入的顺序或者访问的顺序进行遍历。

3.添加、删除操作时间复杂度都是O(1)。

4.最多只允许一条key为Null,允许多条value为Null。

四.TreeMap

特性:

1.TreeMap是有序的散列表(数组+链表),采用的是红黑树实现。一般用于单线程中存储有序的映射。

2.添加、删除操作时间复杂度都是O(log(n))。

3.只允许value为Null,key不能为Null。

4.TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

Reference:

http://www.jianshu.com/p/24f5bd05b860

http://blog.youkuaiyun.com/chenssy/article/details/26668941

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值