zoukankan      html  css  js  c++  java
  • Java集合类及并发集合类

    ArrayList

    1. 可变数组实现,1.5倍扩容

    2. 非线程安全

    3. 采用了Fail-Fast机制,面对并发的修改时,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险

    LinkedList

    1. 双向循环链表实现

    2. 非线程安全

    3. 元素可为null (对比Deque的另一实现ArrayDeque: 可变数组,元素不可为null,两端增删元素效率高)

    HashTable

    1. 线程安全

    2. k,v不可为null

    3. Hashtable在底层将key-value当成一个整体进行处理,这个整体就是一个Entry对象。Hashtable底层采用一个Entry[]数组来保存所有的key-value对,当需要存储一个Entry对象时,会根据key的hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据key的hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

    HashMap

    1. 非线程安全,采用了Fail-Fast机制,通过一个modCount值记录修改次数,在迭代过程中,判断modCount跟初始过程记录的expectedModCount是否相等,如果不相等就表示已经有其他线程修改了Map,马上抛出异常;另外扩容过程中还有可能产生环形链表。

    2. k,v可为null

    3. 底层使用数组实现,数组中每一项是个单链表,即数组和链表的结合体;当链表长度大于一定阈值时,链表转换为红黑树,这样减少链表查询时间。

    4. synchronized是针对整张Hash表的,即每次锁住整张表让线程独占

    5. HashMap在底层将key-value当成一个整体进行处理,这个整体就是一个Node对象。HashMap底层采用一个Node[]数组来保存所有的key-value对,当需要存储一个Node对象时,会根据key的hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Node时,也会根据key的hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Node。

    LinkedHashMap

    1. LinkedHashMap继承于HashMap,底层使用哈希表和双向链表来保存所有元素

    2. 非同步

    3. 允许使用null值和null键。

    2. 基本操作与父类HashMap相似,通过重写HashMap相关方法,重新定义了数组中保存的元素Entry,来实现自己的链接列表特性。该Entry除了保存当前对象的引用外,还保存了其上一个元素before和下一个元素after的引用,从而构成了双向链接列表。

    HashSet

    基于HashMap实现,参考HashMap

    LinkedHashSet

    继承与HashSet、又基于LinkedHashMap来实现的.

     

  • 相关阅读:
    Altium Designer 20下载与安装教程
    推荐一些好用的Chrome插件
    记录生活——三款优秀云笔记的搭配使用
    Sublime Text3的安装以及python开发环境的搭建
    Altium Designer 只导出PCB元器件及标号的PDF文件的方法
    Altium Designer 编译原理图出现has no driving source警告解决办法
    Altium Designer 16 如何分别导出TOP层和BOTTOM层
    HTML学习记录和总结
    AD16/MDK5/CAD2019及2007/Dev-C++/Office2016专业版软件安装包
    Keil5调试过程中遇到的一些警告和错误
  • 原文地址:https://www.cnblogs.com/cheungchein/p/8464766.html
Copyright © 2011-2022 走看看