• 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值就变化了。
  • 相关阅读:
    day22-20180522笔记
    day20-20180517笔记
    day19-20180515笔记
    day18-20180513笔记
    day17-20180510笔记
    day16-20180508笔记
    Python之初识面向对象
    Python之常用模块(2)
    Python之常用模块(1)
    Python之模块与包(下)
  • 原文地址:https://www.cnblogs.com/nxf-rabbit75/p/13225919.html
Copyright © 2020-2023  润新知