首页 > 编程语言 >public void add(int index, E element)的方法源码分析

public void add(int index, E element)的方法源码分析

时间:2024-04-30 17:11:36浏览次数:20  
标签:index int void list public add minCapacity 源码

  public class ArrayList<E> extends AbstractList<E>
          implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

          public void add(int index, E element) {
              rangeCheckForAdd(index); // 校验数组是否越界

              ensureCapacityInternal(size + 1); 

              System.arraycopy(elementData, index, elementData, index + 1,
                               size - index); // 将指定索引位置后的元素全部向右移动一位

              elementData[index] = element;

              size++;
          }

         // 根据给定的最小容量和当前数组元素来计算所需容量。
          private void ensureCapacityInternal(int minCapacity) {
              // 如果当前数组元素为空数组(初始情况),返回默认容量和最小容量中的较大值作为所需容量
              if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
                  minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
              }

              ensureExplicitCapacity(minCapacity);
         }

         // 判断是否需要扩容
         private void ensureExplicitCapacity(int minCapacity) {
            modCount++;

            // 判断当前数组容量是否足以存储minCapacity个元素
            if (minCapacity - elementData.length > 0)
                // 调用grow方法进行扩容
                grow(minCapacity);
        }

  }




  // 测试方法
  public class Main {
      public static void main(String[] args) {
          ArrayList<String> list = new ArrayList<>();
          list.add("1");
          list.add("2");
          list.add("3");
          list.add(1, "4");
          System.out.println(list);
      }
  }

标签:index,int,void,list,public,add,minCapacity,源码
From: https://www.cnblogs.com/jock766/p/18168378

相关文章

  • WPF MVVM Datagrid Selected Multiple items via behavior interaction.trigger,event
    1.Install Microsoft.Xaml.Behaviors.WpffromNuget;2.Addbehaviorreferenceinxamlxmlns:behavior="http://schemas.microsoft.com/xaml/behaviors"3.Passmethodtomvvmviabehavior,interaction,trigger,eventname,TargetObject,MethodNameinxaml......
  • SystemVerilog -- 2.2 Data Types ~ Signed integers,byte
    SystemVerilog'integer'and'byte'除了verilog支持的所有数据类型外,SystemVerilog还具有许多其他2-state的数据类型。现代testbench中最常用的数据类型是bit、int、logic和byte。integer整数是没有小数部分的数字,换句话说,它们是整数。SystemVerilog有三种新的signed数据类......
  • 问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare inter
    大家都知道Centos8于2021年年底停止了服务,大家再在使用yum源安装时候,出现下面错误“错误:Failedtodownloadmetadataforrepo‘AppStream’:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist”1、进入yum的repos目录代码语言:javascript复制cd/etc/yum......
  • 稳扎稳打 部署丝滑 开源即时通讯(IM)项目OpenIM源码部署流程(linux windows mac)
    背景OpenIM包含多个关键组件,每个都是系统功能必不可少的一部分。具体来说,MongoDB用于持久化存储;Redis用作缓存;Kafka用于消息队列;Zookeeper用于服务发现;Minio用于对象存储。这些组件的众多可能会增加部署的复杂性。此外,系统包含多个微服务模块,这要求有效管理进程的启动、停止......
  • JDK源码分析-TreeSet
    概述TreeSet是Java集合框架中用于存储唯一元素的树形数据结构,它实现了NavigableSet接口,这意味着TreeSet中的元素不仅是有序的,还支持一系列的导航方法。TreeSet的内部实现主要依赖于TreeMap,通过TreeMap的键来维护元素的排序。 类图从以上类图可以看到,TreeSet实现了三个接口,......
  • Linux内核源码-存储驱动之 QSPI Flash
    传输方式DIO/QIO/DOUT/QPIQPI模式(QuadPeripheralInterface),所有阶段都通过4线传输。与之相对的是SPI。SPI模式:纯种SPI(MISO/MOSI两个数据线)DOUT全称DualI/O,命令字和地址字均为单线,仅在数据阶段为双线。QOUT全称QuadI/O,命令字和地址字均为单线,仅在数据阶段为双线......
  • golang将uint32与byte[]互转
    packagemainimport( "encoding/binary" "fmt")funcmain(){ //一个长度为4的byte切片,表示一个负数 bytes:=[]byte{0xFF,0xFF,0xFF,0xFF} //将byte切片转换为int32 num:=int32(binary.BigEndian.Uint32(bytes)) fmt.Printf("Byte切片转换为Int32:%d......
  • WPF pass event method to viewmodel via Interaction:CallMethodAction,TargetObject
    <Windowx:Class="WpfApp71.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 大厂50万节点监控系统架构设计&Prometheus底层源码级剖析
    大厂50万节点监控系统架构设计&Prometheus底层源码级剖析 设计和实现一个大规模监控系统需要深入考虑架构设计、可伸缩性、性能优化等方面。下面是一个关于大规模监控系统架构设计的简要指南,以及有关Prometheus底层源码的剖析:大规模监控系统架构设计:1.架构设计原......
  • Prometheus源码解读系列 prometheus---告警处理源码剖析
    一、Target数据采集scrape模块解读1、scrapetarget业务流程框架1、由scrape.Manager管理所有的抓取对象;2、所有的抓取对象按group分组,每个group是一个job_name;3、每个group下含多个scrapeTarget,即具体的抓取目标endpoint;4、对每个目标endpoint,启动一个抓取goroutine,按照......