Java基础--数组

文章详细介绍了Java集合框架中的数组和集合类,包括ArrayList、LinkedList、Vector的特性与扩容机制,以及HashSet、LinkedHashSet、TreeSet的实现方式。同时,探讨了HashMap、LinkedHashMap、TreeMap和Hashtable的底层数据结构与线程安全性,特别提到了ConcurrentHashMap作为线程安全的Map实现。
摘要由CSDN通过智能技术生成

一、 数组
    list: 继承于Collection接口,只用于对单列数据的存储,有序可重复,有多个实现例如下:

        ArrayList:底层由数组实现,查询快,增删慢;线程不安全,效率高
        扩容机制:初始化的一个ArrayList是一个空数组,当添加第一个元素的时候,内部会调用扩容方法返回最小容量10,当添加第11个元素时开始扩容,新    数组 是旧数组的1.5倍(本质就是计算出新的扩容数组的大小后实例化,并将原有数组内容复制到新数组,然后给予数组对象地址)

        LinkedList:底层由链表实现,查询慢,增删快;线程不安全,效率高
        Vector:底层由数组实现,查询快,增删慢;线程安全,效率低,线程安全的,因为在其操作函数中带有synchronized
        扩容机制:
             当使用无参构造方法时,默认初始容量是10,每次扩容为原容量的2倍
             当使用的是一个参数的有参构造函数时,初始化容量则为指定的长度,每次扩容为原容量的2倍 

             当使用的是两个参数的有参构造函数创建Vector对象时,初始化容量则为指定的长度,每次扩容,容量 = 原容量 + 指定的扩容长度

                
    set:

        HashSet:底层由哈希表来实现,无序不可重复(唯一性由equals()和hashcode()方法保证)
              LinkedHashSet:底层由链表和哈希表来实现,有序不可重复(由链表保证元素有序;由哈希表保证元素唯一)
              TreeSet:底层由红黑树来实现,有序不可重复

    map:是一个顶层接口,用于对键值对进行存储,值可重复,键不可重复

              HashMap:底层实现是数组+链表+红黑树的形式的,同时它的数组的默认初始容量是16、扩容因子为0.75,每次采用2倍的扩容。也就是说,每当我们    数组中的存储容量达到75%的时候,就需要对数组容量进行2倍的扩容。无序,线程不安全,允许null值(键和值都允许)

              LinkedHashMap:通过双联表的结构来维护节点的顺序的,每个节点都进行了双向的连接,维持插入的顺序。head指向第一个插入的节点,tail指向最后    一个节点。它是HashMap的子类,继承了HashMap。

              TreeMap:底层使用红黑树来实现,有序

               Hashtable:无序,线程安全;不允许null值;HashTable相对于HashMap的最大特点就是线程安全,所有的操作都是被synchronized锁保护的

        ConcurrentHashMap:这是现阶段使用使用比较多的一种线程安全的Map实现类。在1.7以前使用的是分段锁机制实现的线程安全的。但是在1.8以后使用    synchronized关键字实现的线程安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值