你每天都在用的Java集合框架,您真的懂吗?( 二 )

  • ConcurrentHashMap:底层数据结构jdk1.7以前采用 分段数组+链表,jdk1.8以后使用数组+链表/红黑二叉树 。在实现线程安全方面,jdk1.7以前使用分段锁对容器中一部分的数据加锁;jdk1.8以后使用synchronized和CAS来实现,只锁定当前链表或红黑二叉树的首结点,只要hash不冲突,就不会产生并发 。
  •  
    你每天都在用的Java集合框架,您真的懂吗?

    文章插图
     
     
    你每天都在用的Java集合框架,您真的懂吗?

    文章插图
     
    #HashMap长度为什么是2的幂次方- 主要是为了尽可能的减少碰撞,为了减少碰撞,其使用的算法是<(n-1)& hash>,即对hash值用数组长度取模 。五、Collections工具类void reverse(List list) ===========> 反转
    void shuffle(List list) ============> 随机排序
    【你每天都在用的Java集合框架,您真的懂吗?】void sort(List list) ===============> 按自然排序的升序排序
    void sort(List list,Comparator c) ==> 定制排序,由Comparator控制排序逻辑
    void swap(List list,int i,int j) ===> 交换两个索引位置的元素
    void rotate(List list,int distance) => 旋转 。当distance为正数时,将list后distance个元素整体移到前面 。当为负数时,将list前disntance个元素整体移到后面
    int binarySearch(List list,Object key) ==>对List进行二分查找,返回索引,注意List必须是有序的
    int max(Collection coll) =============> 根据元素的自然顺序,返回最大的元素 。类比int min(Collection coll)
    int max(Collection coll,Comparator c) ===> 根据定制排序,返回最大元素
    void fill(List list,Object obj) =========> 用指定的元素代替指定list中的所有元素 。
    int frequency(Collection c,Object o) =====> 统计元素出现次数
    int indexOfSubList(List list,List target) ===>统计target在list中第一次出现的索引,找不到则返回-1
    boolean replaceAll(List list,Object oldVaule,Object newValue) ===>用新元素替换旧元素




    推荐阅读