Map的分类和不同的应用场景
java为数据结构中的映射定义了一个接口java.util.Map;
它有四个实现类,分别是HashMap
,Hashtable
,LinkedHashMap
和TreeMap
可能很多人只使用过HashMap,但还是那句话,你可以不用,但你不能不懂。如果你也是这样,恭喜你发现了宝藏。
首先是这个原始天尊-Map
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
1. 大徒弟HashMap
Hashmap是一个最常用的Map,它根据键的HashCode值存储数据根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最 多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
2. 守边疆的Hashtable(只忠心一主,线程安全)
Hashtable与HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写 入时会比较慢。
3. 循规蹈矩的LinkedHashMap
LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历
LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量 很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
4. 爱算账的TreeMap
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。
在整个M国,四位徒弟分管不同部门,各司其职,各有优缺
一般情况下, 我们用的最多的是HashMap,在Map中插入、删除和定位元素,HashMap是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会 更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列。
HashMap是一个 最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条 记录的键为NULL,允许多条记录的值为NULL。
HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。
在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用lterator遍历TreeMap时,得到的记录是排过序的。
Map的分类和不同的应用场景相关推荐
- webworker应用场景_JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
Web Workers 分类及 5 个使用场景 这是 JavaScript 工作原理的第七章. 本系列持续更新中,Github 地址请查阅这里. 现在,我们将会剖析 Web Workers:我们将会综 ...
- Java中List,Set和Map详解及其区别和使用场景(转)
Java中的集合包括三大类,它们是Set(集).List(列表)和Map(映射),它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashS ...
- map和foreach的区别和应用场景_支付宝小程序和微信小程序,两者有何区别?
原标题:支付宝小程序和微信小程序,两者有何区别? 自2017年1月微信推出小程序之后,小程序的发展势头便愈来愈猛.作为腾讯老对头的阿里,也开始投入小程序的研发.在一年多的开放公测后,支付宝小程序终于于 ...
- map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
概念: 模型: VO与DTO的区别 VO与DTO的应用 DTO与DO的区别 DTO与DO的应用 DO与PO的区别 DO与PO的应用 本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和P ...
- map和foreach的区别和应用场景_说说session和cookie区别与主要应用场景,localStorage的特点...
session和cookie区别 1.session保存在服务器,cookie保存在客户端 2.session中保存的时对象,cookie保存的是字符串 3.session不能区分路径,同一个用户访问 ...
- 《智能控制技术》学习笔记-1.绪论,智能控制定义、分类、发展及应用场景
一.引言 先修内容: 经典控制理论.现代控制理论.MATLAB 引入:智能理论是新兴学科,随着数字计算机和人工智能发展而来,发展得益于许多学科:人工智能.认知科学.现代自适应控制.最优控制.神经元网络 ...
- Formal Verification (一) 形式验证的分类、发展、适用场景
资料分享:百度网盘 提取码:csdn Definition Formal Verification:利用数学分析的方法,通过算法引擎建立模型,对待测设计的状态空间进行穷尽分析的验证. Kinds of ...
- 电容的结构分类介质封装及应用场景总结
- 场景理解--场景分类
场景分类是遥感图像处理的一个重要环节,也是遥感研究领域的热点.随着卫星遥感图像和航空遥感图像分辨率不断提高,可以从遥感图像中获得更多有用的数据和信息.而针对不同场合的应用,对遥感图像的处理也有着不同的 ...
最新文章
- python页面调用接口_python调用接口——requests模块
- 关于收到部分还款SAP系统两种处理方法的说明和比较
- ABAP:List中回写CheckBox的值到内表
- 张志华教授《机器学习导论》和《统计机器学习》课程讲义
- SalesArea F4 help implementation
- c调用python第三方库_用 Python ctypes 来调用 C/C++ 编写的第三方库
- python中exit的作用_python __enter__ 与 __exit__的作用,以及与 with 语句的关系
- 行列式、LGV、矩阵树学习笔记
- Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.21
- LC3无重复最长字串
- 无人驾驶的分级以及产品化后会带来的改善
- matlab计算积和式,定积分计算方法总结
- 计算机需要无线网卡进行网络连,无线网卡
- 基于FlexRay总线的汽车冗余线控转向系统的可靠性(FEMA)分析
- windows 文件后缀名
- 微信公众号开发之微信支付开发
- 内外盘期货分仓系统,仿真模拟考核系统
- 共享单车泡沫破灭,自行车产业链的每个环节都被波及
- django 注册登录邮箱验证功能
- 基于C++的UKF代码示例,跟踪三次多项式曲线
热门文章
- 设置腾讯云linux服务器中 MySQL 允许远程访问
- 2022-2028年中国亲子游行业市场分析及前瞻研究报告
- linux修改mysql密码sa_如何修改SA口令,数据库SA密码怎么改?
- 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
- Redis 预防缓存穿透“神器” — 布隆过滤器
- python2 安装faiss-gpu 报错 faiss/faiss/python/swigfaiss.i:241: Error: Unable to find ‘faiss/impl/platfo
- python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)
- java实现将汉语转换为拼音
- [Pytorch]基于混和精度的模型加速
- Linux实现ffmpeg H.265视频编码