• Java集合(二)


    目录

    1.List接口概述

    2.ArrayList的底层源码分析

    3.LinkedList的源码分析

    4.Vector的源码分析

    5.List接口中的常用方法


    1.List接口概述

    特点:

    1. 存储的元素都是有序的可重复的。
    2. 因为其有序和可重复性,我们通常用List接口的实现类来替换数组。

    具体实现类的特点

    1. ArrayList:①作为List接口的主要实现类。
    2. ②线程不安全的,效率较高。
    3. ③底层使用Object数组来进行存储
    4. LinkedList:①底层使用双向链表来进行存储。
    5. ②对于频繁的插入和删除操作效率比较高。
    6. Vector:①作为List接口的古老实现类,在Java1就已经存在了。
    7. ②线程安全的,效率较低。
    8. ③底层使用Object数组来进行存储。

    2.ArrayList的底层源码分析

    jdk7中的源码分析

    ①当使用空参构造器创建对象时,底层创建了一个长度为10的Object数组。

    ②添加数据时,先判断当前Object数组长度是否足够,如果长度足够则直接添加;如果长度不够则先将底层数组长度扩容为原来容量的1.5倍,同时将原有数组赋值给新数组。

    建议:因为当底层数组不够长时需要扩容,所以如果知道大概要存储多少数据,则建议使用带参构造器来指定底层数组的长度。

    jdk8中的源码分析

    ①使用空参构造器创建对象时,底层初始化为{}。

    ②在第一次调用add()方法时底层才创建长度为10的Object数组。

    ③后续添加数据同jdk7同样。

    jdk7中的ArrayList类似于单例模式中的饿汉式,jdk8中的类似于懒汉式,延迟了数组对象的创建,节省了内存。

    3.LinkedList的源码分析

    在LinkedList中定义了内部类Node,每个Node对象对应双链表中的一个节点。 

    4.Vector的源码分析

    除了在扩容时将容量变为原来容量的两倍之外其他和jdk7中ArrayList一样。 

    5.List接口中的常用方法

    1. add(int index,Object obj):向index位置插入obj对象。
    2. addAll(int index,Collection col):将col中的数据插入到指定位置 。
    3. get(int index):获取指定位置。
    4. indexOf(Object obj):返回当前对象在当前list对象中首次出现的索引。
    5. lastIndexOf(Object obj):返回最后一次出现的索引。
    6. Object remove(int index):将指定位置的元素删除,并返回。
    7. Object set(int index,Object obj):将指定位置的元素设置为obj,并返回。
    8. subList(int index,int endIndex):获取一个子List。
  • 相关阅读:
    python中的迭代器
    2022亚太杯数学建模比赛准备
    GitHub 供应链安全已支持 Dart 开发者生态
    第十三届蓝桥杯C++B组国赛C题——卡牌 (AC)
    大一大二一心学算法的利弊痴迷于算法时间不足怎么办?
    一本通1078;求分数序列和
    Redis的高可用
    Cadence16.6 > OrCAD Capture CIS >原理图统一改器件属性
    走廊上的相机安装及调试方法
    题目0061-第K个最小码值的字母
  • 原文地址:https://blog.csdn.net/m0_71987537/article/details/125473845