Map的分类和常见的一些情况

java为数据结构中的映射提供了一个接口 java.util.Map,他有四个实现类,分别是:HashMap、HashTable、LinkedHashTable和TreeMap

Map概述

我们有必要先说上一嘴 映射 是个啥,简单的理解就是一些对应关系,比如:单词表中许多单词和翻译的对应关系、一次数学考试学生姓名和成绩的对应关系等等。而Map集合就可以用来储存他们。我们将这种两个数据的组合称为键值对,Map集合是根据键来取值的,所以不允许重复的键(重复了就会被覆盖掉),但是允许值重复。

HashMap

HashMap是最常用的Map,HashMap由数组和链表来实现对数据的存储(1.8之后还有用到红黑树)。它是根据键的HashCode值储存数据,可以根据键直接获取他所在的位置,所以具有很快的访问速度,它的平均查找速度接近于1。遍历的时候,拿到数据的顺序是完全随机的。HashMap最多只允许一条记录的键为null,不限制值为null的数量。

线程安全方面,HashMap是线程不安全的,也就是说同一时刻可能有多个线程同时写HashMap;可能会导致数据不一致。如果有特殊需求需要加锁,可以直接使用ConcurrentHashMap。

HashTable

HashTable和HashMap很类似,但是和HashMap不同的是,它继承自Dictionary类;它不支持记录的键或者值为空;它支持线程同步,是线程安全的,但是这也导致了HashTable相对速度较慢

LinkedHashMap

他是HashMap的一个子类,通过维护一个运行于所有条目的双向链表,记录元素的插入顺序,在使用 Iterator 遍历的时候,先得到的肯定是先插入的。一般来说LinkedHashMap遍历速度没有HashMap快。但是如果HashMap容量很大,但是实际储存的元素并不多的时候存在HashMap遍历速度比LinkedHashMap慢的可能。因为LinkedHashMap遍历速度只和实际数据量有关,和容量没有关系。

TreeMap

TreeMap底层是使用红黑树实现的,红黑树结构天然支持排序,默认情况下通过Key值的升序进行排序。

 

总结

一般情况下我们使用HashMap,在Map中插入、删除、查找元素,HashMap可以算最好的选择。如果有排序需求,使用TreeMap。如果对储入和取出顺序有要求可以使用LinkedHashMap。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员麻薯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值