zoukankan      html  css  js  c++  java
  • Map双列集合(一)

    一.了解Map集合吗?Map集合都有哪些实现
    1.HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap

    二.HashMap和HashTable之间的区别
    1.HashMap:底层基于数组+单向链表(红黑树),非线程安全,默认容量为16,允许有空的键和值
    数组:Node<K,V> [] table ,每一个元素都是一个Node
    单向链表:Node<K,V> next,当发生Hash碰撞,会追加链表,当链表长度大于8,那就转换为红黑树
    2.HashTable:底层基于哈希表实现,线程是安全的,默认容量为11,不允许有空的键和值

    三.hashCode()和equals()方法使用场景
    hashCode():顶级父类Object当中的方法,返回值类型为int类型的值,根据一定的规则(存储地址,字段,长度等等)生成一个数组,数据保存的就是Hash值
    equals():顶级类Object中的方法,根据一定的比较规则,判断对象是否一致,底层一般逻辑:
    1.判断两个对象的内存地址是否一样
    2.非空判断和Class类型判断
    3.强转
    4.对象中的字段一一匹配


    四.HashMap和TreeMap应该如何选择
    HashMap:底层采用数组+链表(红黑树)结构,可以实现快速的存储和检索,但是数据是无序的,适用于在Map当中插入删除或者获取元素

    TreeMap: 存储结构是一个平衡二叉树,具体实现方式为红黑树,默认采用自然排序,可以自定义排序规则,但是需要实现Comparator接口
    能够便捷的实现内部元素的各种排序,但是性能比HashMap差,适用于按照自然排序和自定义排序规则



    五.Set和Map的关系
    Set核心就是保存不重复的元素,存储一组唯一的对象
    set当中每一种实现都对应Map
    HashSet对应的HashMap,TreeSet对应的TreeMap

    六.常见的Map排序规则
    按照添加规则使用LinkedHashMap,按照自然排序或者自定义规则排序可以采用TreeMap

    七.如何保证Map线程安全
    多线程环境下,可以使用concurrent包下有一个ConcurrentHashMap或者是使用Collections.synchronizedList(new HashMap<K,V>());

    ConcurrentHashMap保证线程安全,效率比HashTable高,采分段锁


    八.HashMap底层源码剖析
    1.介绍HashMap底层用到的数据结构

    2.为什么采用红黑树,并且为什么临界值为8

    3.put和get底层源码的核心流程

    九.ConcurrentHashMap底层实现
    1. JDK1.7和JDK1.8底层实现的区别

    2. ConcurrentHashMap底层put方法实现的核心逻辑

  • 相关阅读:
    Orleans is a framework
    修改emlog后台登录路径的方法(转)
    form表单中的 action=./?> 是什么意思
    10 个迅速提升你 Git 水平的提示(转)
    为什么国外程序员爱用苹果Mac电脑?(转)
    Socket 专题
    Android 时间戳简单转化
    Android 常用时间格式转换代码
    Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
    Android AlarmManager类的应用(实现闹钟功能)
  • 原文地址:https://www.cnblogs.com/F017/p/12506041.html
Copyright © 2011-2022 走看看