JAVA中MAP的四种类型区别和常见的简单用法
package com.springtest.map; import org.junit.Test; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * HashMapA * HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。 * HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步, * 即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步, * 可以用Collections.synchronizedMap(HashMapA map)方法使HashMap具有同步的能力。 * Created by Joker on 2017/8/24. */ public class HashMapA {private Map<String, String> map = new java.util.HashMap<>(); @Test public void test() throws InterruptedException {//HashMap多线程,线程不安全,此处使用Collections.synchronizedMap使HashMap具有同步能力 Collections.synchronizedMap(map); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(() -> map.put(null, null)); executorService.submit(() -> map.put("1", "A")); executorService.submit(() -> map.put("2", "B")); Thread.sleep(1000); for (Map.Entry<String, String> key : map.entrySet()) {System.out.println(String.format("[key]=%s\t[value]=%s", key.getKey(), key.getValue())); }}}
package com.springtest.map; import org.junit.Test; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * HashTableA * Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步, * 即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢 * Created by Joker on 2017/8/24. */ public class HashTableA {@Test public void test() throws InterruptedException {//Hashtable本身就是同步机制,所以比较慢 Map<String, Object> map = new Hashtable<>(); ExecutorService executorService = Executors.newCachedThreadPool(); //executorService.execute(() -> map.put(null, null)); executorService.execute(() -> map.put("1", "A")); executorService.execute(() -> map.put("2", "B")); Thread.sleep(1000); Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); while (it.hasNext()) {Map.Entry<String, Object> keyValue = it.next(); System.out.println(String.format("[key]=%s\t[value]=%s", keyValue.getKey(), keyValue.getValue())); }}}
package com.springtest.map; import org.junit.Test; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * LinkedHashMapA * LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时, * 先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。 * Created by Joker on 2017/8/24. */ public class LinkedHashMapA {@Test public void test() throws InterruptedException {//多线程,线程不安全 Map<String, Object> map = new LinkedHashMap<>(); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute(() -> {map.put(null, null); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); map.put("4", "D"); map.put("5", "E"); }); Thread.sleep(1000); Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); while (it.hasNext()) {Map.Entry<String, Object> keyValue = it.next(); System.out.println(String.format("[key]=%s\t[value]=%s", keyValue.getKey(), keyValue.getValue())); }}}
package com.springtest.map; import org.junit.Test; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * TreeMapA * TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。 * 当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。 * TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 * Created by Joker on 2017/8/24. */ public class TreeMapA {@Test public void test() throws InterruptedException {//多线程,线程不安全 Map<String, Object> map = new TreeMap<>(); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute(() -> {//map.put(null, null); map.put("4", "D"); map.put("2", "B"); map.put("3", "C"); map.put("5", "E"); map.put("1", "A"); }); Thread.sleep(1000); Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator(); while (it.hasNext()) {Map.Entry<String, Object> keyValue = it.next(); System.out.println(String.format("[key]=%s\t[value]=%s", keyValue.getKey(), keyValue.getValue())); }}}
JAVA中MAP的四种类型区别和常见的简单用法相关推荐
- JAVA中的引用四种引用类型
关于值类型和引用类型的话题,C++.JAVA.python.go.C#等等高级语言都有相关的概念,只要理解了其底层工作原理,可以说即使是不同的语言,在面试学习工作实践中都可以信手拈来(不要太纠集语言) ...
- Java中创建对象的四种方式
为什么80%的码农都做不了架构师?>>> Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.l ...
- java中创建对象的方式有哪些,Java中创建对象的四种方式
四种方式: http://wenku.baidu.com/link?url=mv6VbMd3d-aCkbGMhn6rbLwFbef7v60nRbyA-thP6Y7hqtjiv0K0_kdtfOWaUj ...
- Java中switch的四种用法
总共有四种不同形式的switch.两种是switch语句,两种是switch表达式,表达式会生成一个值.switch表达式没有"直通式"行为. 表达式,无直通行为 int numL ...
- Spring AOP 中 advice 的四种类型 before after throwing advice around
Spring AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...
- Java中常用的四种线程池
在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例,在Executors类中,为我们提供了常用线程池的创建方法. 接下来我们就来了解常用的四种: ne ...
- python中数字有四种类型_python数据类型(数字Numbers)
数字类数据类型如下四种方式:python 1.整型(int)函数 整型就是整数类型的数,同数学里的十进制数.好比表示年龄.序号等.优化 一.定义整型对象 age = 10 #type()给出参数的数据 ...
- java中数组属于哪种类型_判断(2分) Java中数组的下标只能是各种整数数据类型
参考答案如下 判断比强度是材料轻质高强的指标. 中数组的只能种整当用户访问JSP文件时,对于HTML标签以及文本的输出形式是() 下标型下面选项中,使用post方式提交name="传智播客& ...
- 讲解Java中的String几种类型
1.1·对于String类型,我们在声明一个String类型变量的时候 String test = "STRING"; 这个时候的test只是一个引用,真正的String是STRI ...
最新文章
- MySQL数据库将查询结果插入到其它表中
- JavaScript的5种调用函数的方法
- 配电基础知识汇总,99%的人都收藏了!
- linux apt-get 源,Ubuntu应用之——apt-get更改源地址
- 【今日CV 视觉论文速览】16 Nov 2018
- 电影《你好,李焕英》进入全球票房榜前100
- Linux内核跟踪eBPF:bpftrace 参考指南
- vue滚动条禁止_vue.js中实现禁止浏览器滚动方法
- 混合线性模型如何检测固定因子和随机因子的显著性以及计算R2
- ps一点等于多少厘米_PS像素与厘米之间的转换
- 三极管实现的锁存电路
- 服务器 amd cpu性能排行榜,amd cpu 性能排行榜_amd处理器性能排行
- 解决PHP报错No input file specified
- android涟漪效果,在5.0以上手机上用系统原生方式实现波纹涟漪效果
- dubbo消费者调用报错Unsupported protocol rest in notified url
- AD转换精度提高方法
- 中科院python编程培训班
- 猫和老鼠服务器维修有问题,猫和老鼠常见问题怎么解决_游戏技巧攻略_3DM手游...
- 市场调研-全球与中国企业数据丢失预防(EDLP)产品市场现状及未来发展趋势
- 以梦为码,不负韶华。