编程语言
首页 > 编程语言> > Java、Android数据结构小节,终局之战

Java、Android数据结构小节,终局之战

作者:互联网

     - HashMap 默认容量(16) 和扩容容量都是 2的N次方; Hashtable 的默认容量(11) 和扩容容量(2N + 1). 素数的容量设计可以减小 key 的 hash碰撞问题, 但是 2的N次方 容量设计可以更高效的获取到 key 在哈希桶的位置(Entry数组位置)
    
    - HashMap 内部对 key 的 hashCode 做了一套新的 hash 运算规则, 让高位也参与位置计算, 从而减小碰撞概率. 
    
    -  HashMap 在发生碰撞后把节点实现改为链表, 在节点链表长度超过 7 后, 把链表改为树以增加查询效率

    - https://www.cnblogs.com/xinzhao/p/5644175.html

- ConcurrentHashMap

    - 线程安全, 多线程优化的 Map 结构实现

    - 不允许 null key 和 null value

    - 其他特性同 HashMap类似

- LinkedHashMap

    - HashMap 的子类, 将结构与操作更改为链表形式, 可以保证有序性

    - accessOrder 默认fasle, 代表基于插入顺序; 修改为 true 后重写 removeEldestEntry 方法用来快速实现 lru 算法

- TreeMap
  
    - 不允许 null key 但可以 null value

    - 可以对元素进行排序, 无序集合(插入顺序和便利顺序不一致)

Collections.synchronizedMap(map); 可以使线 Map 程安全.

Map 的 key 需要具有不可变性并且重写 equals() 和 hashCode() 方法

HashMap 和 Hashtable 的底层数据结构是一个数组, 结合了顺序表和单向链表的形式,内部的每一个节点都是 Node 对象

Android 数据结构

关于我

更多Android高级面试合集放在github上面了

需要的小伙伴可以点击关于我 联系我获取

非常希望和大家一起交流 , 共同进步

标签:map,Java,HashMap,链表,线程,key,使用,Android,终局
来源: https://blog.csdn.net/m0_61068325/article/details/120175291