zoukankan      html  css  js  c++  java
  • Java入门6.2---Map

     

    一、Map集合

    1.Map与Collection的区别

    Map集合的特点:将键映射到值的对象,一个映射不能保护重复的键,每个键最多只能映射到一个值。

    区别:

    1. Map集合存储元素是承兑出现的,Map的键是唯一的,值是可以重复的;
    2. Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。

    要点:

    1. Map集合的数据结构针对键有效,跟值无关;
    2. Collection集合的数据结构针对元素有效。

    2.Map的功能

     

    二、HashMap

    1. 底层是散列表+红黑树,初始容量为16,装载因子为0.75,每次扩容2倍;
    2. 允许为null,存储无序;
    3. 非同步;
    4. 散列表容量大于64且链表大于8时,转成红黑树;
    5. key的哈希值会与该值的高16位做异或操作,进一步增加随机性;
    6. 当散列表的元素大于容量*装填因子时,会再散列,每次扩容2倍;
    7. 如果hashCode相同,key不同则替换元素,否则就是散列冲突;

    三、LinkedHashMap

    1. 底层是散列表+红黑树+双向链表,父类是HashMap;
    2. 允许为null,插入有序;
    3. 非同步;
    4. 提供插入顺序和访问顺序两种,访问顺序是符合LRU算法的,一般用于扩展(默认是插入顺序);
    5. 迭代与初始容量无关(迭代的是维护的双向链表);
    6. 大多使用HashMap的API,只不过在内部重写了某些方法,维护了双向链表。

    四、TreeMap

    1. 底层是红黑树,保证了时间复杂度为log(n);
    2. 可以对其进行排序,使用Comparator或者Comparable;
    3. 只要compare或者CompareTo认定该元素相等,那就相等;
    4. 非同步;
    5. 自然排序(手动排序),元素不能为null。

    五、ConcurrentHashMap

    1. 底层是散列表+红黑树,支持高并发操作;
    2. key和value都不能为null;
    3. 线程是安全的,利用CAS算法和部分操作上锁实现;
    4. get方法是非阻塞,无锁的,重写node,通过volatile修饰next来实现每次获取都是最新设置的值;
    5. 在高并发环境下,统计数据(计算size等)其实是无意义的,因为在下一时刻size值就变化了。
  • 相关阅读:
    Docker——搭建SFTP
    PicGo——利用PicGo和GitHub搭建免费图床提供给Typecho使用
    GitHub——如何生成Personal access tokens
    leetcode——两数相加【二】
    每天一道面试题——请实现add(1,2)(3)【二】
    leetcode——两数之和【一】
    每天一道面试题——JavaScript的this指向【一】
    PHP——安装ThinkPHP框架报错
    项目代码 if/else 过多,引起程序猿口吐莲花
    JDK9-JDK14 相关新特性说明及使用
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/13225919.html
Copyright © 2011-2022 走看看