• java遇到的一些集合相关知识


    Collection(接口):

                      List:有序集合,可存放重复数据(存进什么顺序,取出什么顺序)

                              ArrayList:底层数组,线程不安全,查找效率高,快速访问,适合查询,有序可重复

                              LinkedList:底层双向链表,线程不安全,增删效率高,随机访问,适合增删,有序可重复

                              Vector:底层数组,线程安全,效率低,有序可重复

                      Set:无序集合,不允许存放重复数据(存进和取出顺序不一样)

                              HashSet:底层数组+链表+红黑树,无序不可重复

                              TreeSet:底层红黑树,并且实现SortedSet接口,可对元素排序(存进的元素可以按照元素大小自动排序),无序不可重复

    List为Collection增加很多方法可以用for遍历,Set与Collection完全一致,Set采用迭代器遍历,检索效率低,删除插入效率高,且位置不变

    Map(接口):一个无序集合,以键值对方式存放数据,键对象不允许重复,值对象可以重复

             HashMap:底层数组+链表+红黑树,实现不同步,线程不安全,无序存放,key不重复,key-value存储在Entry中,HashMap基于哈希表实现,可以插入为null的key或value,插入的时候检查是否已经存在相同的key

    若不存在,直接插入;若插入,则新的value替换旧的value。

             TreeMap:底层红黑树,线程不安全,按key排序,key不重复

    HashTable:线程安全,无序存放,key不重复

    IdentityHashMap:key可重复,允许key与value都为null,无序线程不安全

    WeakHashMap:弱引用的Map集合

    List(接口)继承Collection(接口)有序可重复

    Set(接口)继承Collection(接口)无序不可重复

    Collection是List和Set的父接口,一般不会直接使用

    线程安全的Map:HashTable、SynchronizedMap、ConcurrentHashMap

    Stack、enumeration也是线程安全的

    ResultSet数组的索引从1开始

    Vector通过数组实现,支持线程同步,内部加锁的,但是效率低,线程安全,扩展空间时,扩展一倍

    ArrayList通过数组实现,线程不安全,可以存储重复数据,不同步,扩展空间时,扩展原来的50%,有利于节约空间

    ThreadLocalMap使用开放地址法来处理散列冲突

    HashMap使用分离链表法来处理冲突

    SortedMap是接口

    HashSet线程不安全,不允许存储相同的对象,内部使用Map保存数据,就是将HashSet的数据作为Map的key值保存,这也就是HashSet中元素不能重复的原因,而Map中保存Key值前会去判断当前Map中是否含有该key对象,内部是先通过key的hashcode,确定形态hashcode之后,再通过equals方法判断是否相同。

    TreeMap基于红黑树实现,key不能为null

    HashMap,TreeMap 线程不安全,未进行同步

    HashTable,ConcurrentHashMap线程安全,其中HashTable对整体加锁,ConcurrentHashMap对需要的加锁。

    LinkedBlockingQueue是可选有界队列,不允许 null值,是基于节点链接的可选是否有界的阻塞队列,线程安全,先进先出,FIFO。

    TreeSet自然排序,LinkedHashSet按添加顺序排序

    PriorityQueue,无界队列,线程安全,不允许null值,入队和出队时间复杂度是O(logn)。

    ConcurrentLinkedQueue,线程安全,遵循FIFO原则。

    ConcurrentHashMap是HashMap(线程安全)的实现类,保存的值可以重复,键不可以重复

    ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,

    ConcurrentHashMap使用ReentrantLock来保证线程安全。

    StringBuilder:线程不安全,运行速度最快

    StringBuffer:线程安全,允许比String快

    String不可变,线程安全

    Sting内部用char[]数组实现,char存储的是unicode码。

  • 相关阅读:
    优思学院|揭秘六西格玛:七大迷思你不可不知!
    HTML5-框架-计算机应用2115-2022年11月17日13:57:13
    ctf:kali工具: msfvenom
    JUC系列(一&二):线程基础、生产与消费模型、8锁问题
    pytorch搭建squeezenet网络的整套工程(升级版)
    iOS 17.4 Not Installed
    CENTOS7安装PROMETHUS(普罗米修斯)监控系统完整版
    不到5分钟就被赶出来的面试,我直呼太变态了......
    docker部署SpringBoot项目
    从0开始python学习-53.python中flask创建简单接口
  • 原文地址:https://blog.csdn.net/a154555/article/details/126941306