Map集合总览

  1. 保存映射关系key-value键值对,键唯一,值可以重复,Map和Set的实现类相似

  2. Entry是Map的内部类

  3. Map接口中常用的方法:

    • void clear()
    • Set keySet(),返回Map中key组成的Set集合
    • Object put(Object key, Object value)
    • Map内部类Entry的方法
      • Object getKey()
      • Object getValue()
  4. Map遍历

    public void map() {
    Map<Integer, String> books = new HashMap<>();
    books.put(1, "first");
    books.put(2, "second");
    // 1.使用foreach
    for (Object key : books.keySet()) {
    System.out.println(key + "->" + books.get(key));
    }
    // 2.使用迭代器
    for(Iterator<Map.Entry<Integer, String>> it = books.entrySet().iterator();it.hasNext();) {
    System.out.println(Key + "->" + it.next().getKey());
    }
    }

HashMap

  1. 核心要点如下:

    • 无序,线程不安全,集合元素可以为null
    • 底层是散列表(数组+链表)和红黑树
    • 散列表中的装载因子属性默认是0.75,当装载因子*初始容量小于需要散列容量时,散列表会再散列,扩容两倍
    • 初始容量默认是16
    • put方法存储时,不是直接使用key的hash值,而是将key的hash值与其高16位进行异或操作,使得在做&运算时的低位其实为高位和低位的结合,增加随机性。防止碰撞冲突
    • 当桶上有8位元素并且散列表容量大于64时链表数组变成红黑树
  2. HashMap与Hashtable比较:
    • 相同

      • 存储结构基本相同,都是实现Map接口
    • 区别
      • HashMap不是线程同步的,Hashtable是线程同步的
      • HashMap允许值为null,Hashtable不允许为null
      • Hashtable有contains方法,HashMap将contains方法改成了containsValue和containsKey
      • HashMap继承AbstractMap,Hashtable继承Dictionary

LinkedHashMap

  1. 核心要点如下:

    • LinkedHashMap比HashMap多了一个双向链表的维护,初始容量对其遍历是不影响的
    • LinkedHashMap调用父类HashMap的put方法,重写了put方法内部的newNode方法
    • 默认使用插入顺序(insertion-ordered)遍历,也可以通过重写方法设置为访问顺序(access-ordered)
    • 访问顺序开启的情况下,get方法和put方法中调用的afterNodeAccess方法会生效,执行将被访问的Entry移到尾部
  2. 对LinkedHashMap进行扩展实现LRUCache

TreeMap

  1. 核心要点如下:

    • 有序,线程不安全,key不能为null
    • 底层是红黑树,时间复杂度保证在O(logN)
    • 默认自然排序,自定义需在构造方法中传入Comparator对象

ConcurrentHashMap

  1. 核心要点如下:

    • Java8中,其底层结构是散列表和红黑树,同HashMap
    • 键、值都不能为null
    • 支持高并发的检索与更新,线程安全
    • get方法是非阻塞的,不需要加锁。因其重写了Node类,通过volatile关键字修饰值V及其对象使得每次获取最新的值
  2. 与Hashtable比较:
    • Hashtable在每个方法上都加上Synchronized以完成同步,效率低下
    • ConcurrentHashMap通过在部分加锁和利用CAS算法来实现同步

面试题一览

文章地址:https://www.cnblogs.com/chenpt/p/9824548.html

集合03_Map的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. .Net多线程编程—并发集合

    并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...

  3. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  4. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  5. java基础_集合List与Set接口

    List接口继承了Collection的方法  当然也有自己特有的方法向指定位置添加元素   add(索引,添加的元素); 移除指定索引的元素   remove(索引) 修改指定索引的元素   set ...

  6. Java基础Collection集合

    1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:

  7. 轻量级“集合”迭代器-Generator

    Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...

  8. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

  9. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)

    在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台 ...

随机推荐

  1. Python全栈-day12-day13-函数4

    1.迭代器 1)定义:迭代取值的工具 2)优缺点 优点 a.提供一种不依赖索引取值的方法 b.同时一时刻内存在存在的值只有一个,更加省内存 缺点 a.取值麻烦,只能通过next方法一个一个地往后取 b ...

  2. STL之stack容器

    1.stack容器 1) stack是堆栈容器,是一种“先进后出”的容器. 2)stack是简单地装饰deque容器而成为另外的一种容器. 3)头文件.#include <stack> 2 ...

  3. mysql主从配置,读写分离

    Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...

  4. hdu1569 莫比乌斯反演

    hdu 1695 莫比乌斯反演 给出a,b,c,d,k, 求满足a <= x <= b && c <= y <= d && gcd(x,y)=k ...

  5. MQTT安装

    技术链接:http://docs.emqtt.cn/zh_CN/latest/getstarted.htmlDashboard控制台:http://10.74.20.43:18083/#/ 默认登录用 ...

  6. Applegate 方法使用

    1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotif ...

  7. 【Hadoop学习之一】Hadoop介绍

    一.概念 Hadoop是一个能够对大量数据进行分布式处理的软件框架,充分利用集群的威力进行高速运算和存储. 二.主要模块Hadoop Common:支持其他Hadoop模块的常用实用程序.Hadoop ...

  8. python中函数嵌套、函数作为变量以及闭包的原理

    嵌套函数: python允许创建嵌套函数.也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变. 例子: #encoding=utf-8 def outer():    name ...

  9. POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)

    题目链接:http://poj.org/problem?id=1330 题意:给定一个n个节点的有根树,以及树中的两个节点u,v,求u,v的最近公共祖先. 数据范围:n [2, 10000] 思路:从 ...

  10. Centos7 在apache+php7环境下 安装 Discuz!X3.4

    拉取Discuz!X3.4代码 git 地址 : https://gitee.com/ComsenzDiscuz/DiscuzX 在/var/www/html 中新建 bbs 文件夹 将git下upl ...