前言

Map是java中用于存储键值对映射的接口。是解决编程问题最常用的数据结构之一。
在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂。这个时候其实可以多考虑下map这种结构了,说不定能更简洁地实现呢。
引用《编程思想》中一个代码示例:
测试Random可以产生理想的数字分布。其实就是统计一个产生随机数的次数。

public class RandomTest {
@Test
public void testRandom()
{
Random rand =new Random(47);
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
for(int i = 1; i < 10000; i++)
{
int r = rand.nextInt(20);
Integer freq = map.get(r);
map.put(r, freq == null ? 1 : freq + 1);
}
System.out.println(map);
}
}

输出结果:
{0=481, 1=502, 2=488, 3=508, 4=481, 5=503, 6=519, 7=471, 8=468, 9=549, 10=513, 11=531, 12=521, 13=506, 14=477, 15=497, 16=533, 17=509, 18=478, 19=464}

Map接口的常用实现类

  • HashMap
  • LinkedHashMap
  • TreeMap
  • ConurrentHashMap
  • Hashtable
  • WeakHashMap

一般来说,HashMap是你的第一选择,因为它对速度进行了优化。如果有其他比如排序或是线程安全方面的需求时,才考虑选择其他的实现。

HashMap特性告白
基于散列表实现,存储key的顺序不是插入的顺序。可以通过构造器设置容量和负载因子,以调整容器性能。
遍历HashMap的几种方法:

	// for循环entryset
for(Entry<Integer,Integer>entry : map.entrySet())
{
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
} // 遍历key获取values
for (Integer key : map.keySet())
{
System.out.println(key + "===" + map.get(key));
} // 遍历values
for (Integer value : map.values()) {
System.out.println("value:" + value);
}

LinkedHashMap 特性告白
类似于HashMap,通过链表来维护插入key的顺序,保证放入和取出的顺序是一致的。
如果使用场景中既要求映射关系、又要保证存储顺序,可以选择此种实现类。
性能上较HashMap慢一点。迭代访问时能快点,因为链表的缘故。

TreeMap 特性告白
基于红黑树实现。查看“键”或“键值对”时,它们会被排序(次序是由Comparable或Comparator决定)。

  • 要么存储进入TreeMap的对象时实现了Comparable接口的可比较对象
  • 要么在创建TreeMap容器时需要传入比较器对象Comparator

ConurrentHashMap 特性告白
java.util.concurrent包中的线程安全的映射容器。
主要为了解决HashMap线程不安全和Hashtable效率不高的问题。

Hashtable 特性告白
是Hashtable,而不是HashTable呦!
基本和HashMap很类似,只是Hashtable的方法加了synchronized重量级锁来保证线程安全性。

WeakHashMap 特性告白
“弱键”映射,允许释放映射所指向的对象;主要是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此“键”可以被垃圾收集器回收。(还没用过,先晓得有这种“高级容器”吧)

总结

本编主要从编码使用层面总结了常用map映射集合的实现类及其各自特性。

关注蚂蚁君,不放过每一次学习的机会。

JAVA集合框架(三)-Map的更多相关文章

  1. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  2. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  3. 【JAVA集合框架之Map】

    一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...

  4. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  5. java 集合框架(三)Collection

    一.概述 Collection是集合框架的根接口.不同的集合具有不同的特性,比如有的集合可以有重复元素,有的不可以,有的可以排序,有的不可排序,如此等等,而Collection作为集合的根接口,它规范 ...

  6. Java集合框架(三)

     Map Map集合:该集合存储键值对,一对一对的往里存,而且要保证键的唯一性. Map |------HashTable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.J ...

  7. java集合框架07——Map架构与源代码分析

    前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set ...

  8. Java 集合框架之 Map

    Hashtable Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子.容量 是哈希表中桶 的数量,初始容量就是哈希表创建时的容量.注意,哈希表的状态为 open:在发生“哈希冲突” ...

  9. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  10. 34、Java集合框架List,Map,Set等全面介绍(转载)

      Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.C ...

随机推荐

  1. C# 子类与父类构造函数

  2. 这个七夕节,用Python为女友绘制一张爱心照片墙吧!【华为云技术分享】

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群:输入关键字“最新活动”,获取华为云最新特惠促销.华为云诸多技术大咖.特 ...

  3. python上下文管理器细读

    test 1 上下文管理器,将生成器转化为上下文管理器 import contextlib @contextlib.contextmanager def a(): print(1) yield pri ...

  4. 关于软件定义IT基础设施的未来,深信服是这么思考的

    在今年的深信服创新大会上,软件定义IT基础设施成为非常重要的议题之一,深信服与2,000余位客户的CIO和合作伙伴一起围绕IT基础设施在数字化时代中的作用与价值进行了深入的探讨. 此外,深信服还联合I ...

  5. 华为ARM64服务器上手体验--不吹不黑,用实际应用来看看TaiShan鲲鹏的表现

    背景 中美贸易冲突以来,相信最大的感受,并不是我对你加多少关税,而是我有,可我不卖给你."禁售"成了市场经济中最大的竞争力. 相信也是因为这个原因,华为"备胎转正&quo ...

  6. Java中替换字符串中特定字符,replaceAll,replace,replaceFirst的区别

    使用“;”替换过字符串中的“,” public class Test01 {public static void main(String[] args) {String number = " ...

  7. Mybatis 报错 java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.Inte

    like ‘%java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.la ...

  8. Appium之UIAutomator API选择元素

    UI Automator测试框架提供了一组API来构建UI测试. 利用UI Automator API可以执行在测试设备中,打开‘设置’菜单或应用启动器等操作. UI Automator测试框架非常适 ...

  9. 【JS】394- 简明 JavaScript 函数式编程-入门篇

    转载自公众号"程序员成长指北" 写在开头 本文较长,总共分为三大部分:(对于函数式编程以及其优点有一定理解的童鞋,可以直接从 第二部分 开始阅读) 第一部分:首先会通过实际代码介绍 ...

  10. postman接口测试工具的常规使用

    目录 postman接口测试工具简介与安装 postman发送get请求 JSON数据详解 postman发送post请求 postman中post请求传参说明 postman设置请求的header ...