zoukankan      html  css  js  c++  java
  • 集合03_Map

    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

  • 相关阅读:
    Github使用手册2——Github使用自己的远程仓库
    GitHub使用手册1——fork and pull request
    如何申请Pycharm学生免费激活码
    博客园入园手册2——Markdown编辑器1
    博客园入园手册1——TinyMEC编辑器
    实验一 GIT 代码版本管理
    结对项目-数独程序扩展(要求细化更新)
    个人作业Week2-代码复审(修改明确了要求)
    个人作业-Week1(新增详细说明)
    个人项目-数独
  • 原文地址:https://www.cnblogs.com/pycrab/p/8933991.html
Copyright © 2011-2022 走看看