Java Map知识点
1、遍历
java遍历Map的方式有多种,一下以代码示例来说明使用:
Map<String, String> tmap = new HashMap<String, String>(5);
tmap.put("a", "aa");
tmap.put("b", "bb");
tmap.put("c", "cc");
tmap.put("d", "dd");
tmap.put("e", "ee");
//常用方式
System.out.println("************ 1 entrySet ************");
for (Map.Entry<String, String> map : tmap.entrySet()) {
String key = map.getKey();
String value = map.getValue();
System.out.println(key + ":" + value);
}
System.out.println("************ 2 iterator ************");
Iterator<Map.Entry<String, String>> iterator = tmap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> next = iterator.next();
System.out.println(next.getKey() + ":" + next.getValue());
}
//只需要map中的键或者值,可以通过keySet或values来实现遍历
System.out.println("************ 3 keySet 通过键找值遍历(效率低)************");
Set<String> keySet = tmap.keySet();
for (String key : keySet) {
String value = tmap.get(key);
System.out.println(key + ":" + value);
}
System.out.println("************ 4 values ************");
Collection<String> values = tmap.values();
for (String value : values) {
System.out.println(value);
}
//java8
System.out.println("************ 5 java8 forEach ************");
tmap.forEach((key, value) ->
System.out.println(key + ":" + value)
);
2、常用Map
2.1 常用Map有HashMap、LinkedHashMap、TreeMap三种:
HashMap是常规的哈希表,查询以及插入的性能最好,在使用中用的较多,因为HashMap是线程不安全的,所以多线程中不好使用。
LinkedHashMap可以指定遍历顺序或者按最近最少使用的顺序,它实现上继承了HashMap,只是比HashMap多维护了一个双链表,故查询及插入性能稍差于HashMap,遍历性能要好于HashMap。在按照元素添加顺序遍历,可以选择使用LinkedHashMap。示例:
System.out.println("*******LinkedHashMap*******");
//第三个参数设置true,表示按照访问顺序排序。每次访问一个元素(get或put),被访问的元素都被放到最后。
LinkedHashMap linkedHashMap = new LinkedHashMap(16, 0.75f, true);
linkedHashMap.put("1", "1");
linkedHashMap.put("2", "2");
linkedHashMap.put("3", "3");
loopLinkedHashMap(linkedHashMap);
linkedHashMap.get("1");
loopLinkedHashMap(linkedHashMap);
linkedHashMap.put("4", "4");
loopLinkedHashMap(linkedHashMap);
linkedHashMap.get("3");
loopLinkedHashMap(linkedHashMap);
linkedHashMap.put("5", "5");
loopLinkedHashMap(linkedHashMap);
linkedHashMap.get("2");
loopLinkedHashMap(linkedHashMap);
TreeMap是有序的,它将元素存储在一个红黑树中,存储在它里面的Key必须实现Comparable接口,key是从小到大排好序的。各项性能上相比HashMap来说较差。在需要存储元素需要有序时,可以选择TreeMap。
2.2 同步 Map
2.2.1 使用 Collections.synchronizedMap() 将未同步的 Map 转换为同步的 Map。例:
HashMap<Integer,String> hashMap = new HashMap<>();
Map<Integer,String> synchronizedMap = Collections.synchronizedMap(hashMap);
2.2.2 ConcurrentReaderHashMap 和 ConcurrentHashMap。
这些 Map 实现是线程安全的,并且不需要对并发访问或更新进行同步,同时还适用于大多数需要 Map 的情况。它们还远比同步的 Map(如 Hashtable)或使用同步的包装器更具伸缩性,并且与 HashMap 相比,它们对性能的破坏很小。util.concurrent 程序包构成了 JSR166 的基础;JSR166 已经开发了一个包含在 Java 1.5 版中的并发实用程序,而 Java 1.5 版将把这些 Map 包含在一个新的 java.util.concurrent 程序包中。
ConcurrentHashMap<Integer,String> concurrentHashMap = new ConcurrentHashMap<>();
示例代码Github
Java Map知识点的更多相关文章
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- JAVA常用知识点及面试题总结
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
- Java 面试知识点解析(一)——基础知识篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(七)——Web篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java基础知识点(二)
前言:Java的基础知识点不能间断. 1.Array和ArrayList的区别 关于Array的用法,参看:http://blog.csdn.net/b_11111/article/details/5 ...
- Java基础知识点(一)
前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...
- Java基础知识点总结
前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...
- JAVA基础知识点总结(全集)
1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...
随机推荐
- Python之流程控制——while循环
Python之流程控制--while循环 一.语法 while 条件: 执行代码 while就是当的意思,它指当其后面的条件成立,就执行while下面的代码. 例:写一个从0打印到10的程序 coun ...
- 前端通过Blob实现文件下载
最近遇到一个需求,需要将页面中的配置信息下载下来供用户方便使用,以前这个场景的需求有时候会放到后端处理,然后给返回一个下载链接.其实并不需要这么麻烦,这样既增大了服务器的负载,也让用户产生了没有必要的 ...
- HTML(六)框架,颜色,脚本,字符实体,统一资源定位器
HTML 框架 HTML框架 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面 Iframe移除边框 使用iframe来显示目标链接页面 RUNOOB.COM HTML 颜色 rgb(255, ...
- (五十八)c#Winform自定义控件-管道阀门(工业)
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- 【基准测试】JMH 简单入门
JMH 简单入门 什么是 JMH JMH 是 Java Microbenchmark Harness 的缩写.中文意思大致是 "JAVA 微基准测试套件".首先先明白什么是&quo ...
- 掀起你的盖头来:浅谈项目管理办公室(PMO)
[提示]本文为“分享:<PMBOOK>读书笔记系列”由傻瓜(来自人人都是产品经理6群)编写. 之前与大家一定对项目.项目管理.项目集.项目组合等知识进行了简单的学习,如果有不太清楚和不太明 ...
- 如何在 Ubuntu 上安装 MongoDB
MongoDB 是一个越来越流行的自由开源的 NoSQL 数据库,它将数据存储在类似 JSON 的灵活文档集中,这与 SQL 数据库中常见的表格形式形成对比. 你很可能发现在现代 Web 应用中使用 ...
- 编写一个函数来找出所有不带歧义的函数名,也就是 那些只在一个模块里出现过的函数名(erlang)
erlang程序设计第八章练习题第二题: code:all_loaded()命令会返回一个由{Mod,File}对构成的列表,内含所有Erlang系统 载入的模块.使用内置函数Mod:module_i ...
- Redis的那些最常见面试问题(转)
Redis的那些最常见面试问题 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...
- Elasticsearch之更新
public class UpdateElasticAPI { private static RestClient restClient; static { restClient=RestClient ...