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的四种类型区别和常见的简单用法相关推荐

  1. JAVA中的引用四种引用类型

    关于值类型和引用类型的话题,C++.JAVA.python.go.C#等等高级语言都有相关的概念,只要理解了其底层工作原理,可以说即使是不同的语言,在面试学习工作实践中都可以信手拈来(不要太纠集语言) ...

  2. Java中创建对象的四种方式

    为什么80%的码农都做不了架构师?>>>    Java中创建对象的四种方式 (1) 用new语句创建对象,这是最常见的创建对象的方法.    (2) 运用反射手段,调用java.l ...

  3. java中创建对象的方式有哪些,Java中创建对象的四种方式

    四种方式: http://wenku.baidu.com/link?url=mv6VbMd3d-aCkbGMhn6rbLwFbef7v60nRbyA-thP6Y7hqtjiv0K0_kdtfOWaUj ...

  4. Java中switch的四种用法

    总共有四种不同形式的switch.两种是switch语句,两种是switch表达式,表达式会生成一个值.switch表达式没有"直通式"行为. 表达式,无直通行为 int numL ...

  5. Spring AOP 中 advice 的四种类型 before after throwing advice around

    Spring  AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...

  6. Java中常用的四种线程池

    在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例,在Executors类中,为我们提供了常用线程池的创建方法. ​ 接下来我们就来了解常用的四种: ne ...

  7. python中数字有四种类型_python数据类型(数字Numbers)

    数字类数据类型如下四种方式:python 1.整型(int)函数 整型就是整数类型的数,同数学里的十进制数.好比表示年龄.序号等.优化 一.定义整型对象 age = 10 #type()给出参数的数据 ...

  8. java中数组属于哪种类型_判断(2分) Java中数组的下标只能是各种整数数据类型

    参考答案如下 判断比强度是材料轻质高强的指标. 中数组的只能种整当用户访问JSP文件时,对于HTML标签以及文本的输出形式是() 下标型下面选项中,使用post方式提交name="传智播客& ...

  9. 讲解Java中的String几种类型

    1.1·对于String类型,我们在声明一个String类型变量的时候 String test = "STRING"; 这个时候的test只是一个引用,真正的String是STRI ...

最新文章

  1. MySQL数据库将查询结果插入到其它表中
  2. JavaScript的5种调用函数的方法
  3. 配电基础知识汇总,99%的人都收藏了!
  4. linux apt-get 源,Ubuntu应用之——apt-get更改源地址
  5. 【今日CV 视觉论文速览】16 Nov 2018
  6. 电影《你好,李焕英》进入全球票房榜前100
  7. Linux内核跟踪eBPF:bpftrace 参考指南
  8. vue滚动条禁止_vue.js中实现禁止浏览器滚动方法
  9. 混合线性模型如何检测固定因子和随机因子的显著性以及计算R2
  10. ps一点等于多少厘米_PS像素与厘米之间的转换
  11. 三极管实现的锁存电路
  12. 服务器 amd cpu性能排行榜,amd cpu 性能排行榜_amd处理器性能排行
  13. 解决PHP报错No input file specified
  14. android涟漪效果,在5.0以上手机上用系统原生方式实现波纹涟漪效果
  15. dubbo消费者调用报错Unsupported protocol rest in notified url
  16. AD转换精度提高方法
  17. 中科院python编程培训班
  18. 猫和老鼠服务器维修有问题,猫和老鼠常见问题怎么解决_游戏技巧攻略_3DM手游...
  19. 市场调研-全球与中国企业数据丢失预防(EDLP)产品市场现状及未来发展趋势
  20. 以梦为码,不负韶华。

热门文章

  1. 保研——夏令营预推免全过程经验贴
  2. Excel——快速删除空白行、空白单元格
  3. 编码建议--魔鬼在细节
  4. 从端游走到手游:未来只会有两大方向
  5. 喷涂硬质聚氨酯(PUR)和聚异氰脲酯(PIR)泡沫保温材料英国UKCA 认证—EN 14320-1
  6. 硬质聚氨酯(PUR)和聚异氰脲酯(PIR)泡沫产品保温材料英国UKCA认证- EN 14318-1
  7. 数组排序的选择排序法(算法)
  8. 详细解析漏洞4个boom
  9. 2022QQ群排名优化规则教程解析
  10. 【热度排行】热度排行算法