当前位置: 首页 > 网络应用技术

Java集合详细说明

时间:2023-03-07 03:02:01 网络应用技术

  ArrayList是Java Collection Framework中常用的数据结构。从AbstractList中介绍,实现列表接口。基础层基于数组实现容量的动态变化的数组。允许Null的存在。在同一时间,随机,随机,可插入,可被插入,还实现了可序列化的接口,因此ArrayList支持快速访问,复制和序列化。

  默认初始容量10

  empty_elementdata和defaultcapacity_empty_elementdata在构造函数中使用

  这两个空数组之间有什么区别?我们将其与empty_elementdata区分开来知道添加元素时要包含多少。当第一个添加的元素被分配时,元素数据构造函数将通过参与函数初始化,以确认如何扩展容量。

  数组列表元素的数组缓冲区

  数组中的元素的大小,大小是指元素数据中实际有多少元素。

  modCount在父类中定义了atmpractlist.record列表的操作数。

  3.1非参数构造函数需要注意非构造函数。它被分配给ElementData的空数组。当第一个添加元素时,容量将扩大到10。请勿注释误导。在这里可以看到参数构造函数将defaultcapacity_empty_elementdata分配给elementData

  

  3.3通过指定集合初始化设计,将集合转换为数组,并将值分配给ElementData.Lengths size;如果大小!= 0,确定元素数据类型是否为对象[]类型,而不是进行转换(请注意,实际上是官方错误解决方案);如果size == 0,则将empty_elementData分配给elementData,这等同于新的arraylist(0)

  4.1添加操作nesurecapacity internal();

  每次您在集合中添加元素时,您都会首先确认设定容量的大小;

  calculatingCapacity();

  确定Default_capacity和MinCapacity的最大值,即10;阵列的初始容量为10;

  modCount ++;

  记录操作数量;

  MinCapacity -ElementData.Length> 0;

  当数组的长度不够时,数组会扩展数组,而grow()函数执行的逻辑

  旧容量 +(旧容量>> 1)

  默认情况下,将数组的大小扩展到原始数量的1.5倍

  新容量-Mincability < 0

  如果扩容后的容量不足,则将所需容量minCapacity赋值给newCapacity,扩容后数组大小就是申请的容量

  newCapacity - MAX_ARRAY_SIZE > 0

  如果容量之后数组的容量太大,则数组的大小大于integer.max_value -8的大小,阵列的大小为hugecapacity(),(mincapacity> max_array_size)?integer.max_value:max_array_size;

  其余的add()方法相似

  4.2删除操作rangecheck(索引);

  检查指数是否合法。当索引> =大小时,请抛出indexoutofBoundSexception异常;

  modCount ++;

  记录该集合的操作数量;

  eldvalue = ElementData(index);

  删除拆卸元件并使用它将其放回方法呼叫者;

  如果(数字> 0)

  确定当前删除的集合元素的最后一个元素不是最后一个元素,然后调用System.ArrayCopy()方法制作数组副本;数组的最后一个元素放置在NULL上,等待GC废物回收; -大小阵列的大小减小了一个;

  4.3获取操作RangeCheck(索引);

  检查指数是否合法。当索引> =大小时,请抛出indexoutofBoundSexception异常;

  ElementData(index);

  由于数组的底层由数组实现,因此所有采集元素都可以直接调用数组的随机访问。

  5.1前言Java开发初级工程师用于遍历集合时,因为不正确的API方法用于执行删除()操作,Java.util.currentmodfinexception通常会抛出。因此,它为什么会产生contrentModificationException以及如何求解此异常!foreach循环也被称为循环增强。它是由JDK1.5生成的,以简化使用容器的数组或遍历。foreach循环的应用范围:对于任何实现峰值接口的容器,可以使用foreach周期。可以使用foreach语法后面的两种类型,一个是数组类型。另一个是实现峰值接口的类。

  如下所示,当foreach穿越列表集合时,列表。

  5.2 ArrayList中的迭代器本质上是返回ITR实例化对象

  ArrayList定义了ITR内部类以实现迭代器接口,并且ITR内部有三个属性。

  光标:它表示下一个访问元素设置;

  lastret:它表示先前访问元素的结算,默认值为-1;

  ExpectmodCount:它表示阵列列表的修改数量的次数,初始值等于MODCOUNT

  hasnext();

  确定是否存在下一个元素,只要下一个元素的下一个元素的募集不等于元素元素的数量,元素的数量就会返回true。

  下一个 ();

  获取集合中的下一个元素

  CheckForcomodification();

  确定modCount和Expectionmodcount是否相等,并且未介导的consurrentModification Exception

  i =光标;i> = size;i> = elementdata.length

  为了判断光标的大小,如果光标的值大于集合中的元素数量,则会抛出NosuchelementException异常;如果光标大于阵列的长度,则会抛出consurrentModificationException异常。

  光标= i + 1;lastret = i

  如果满足上述情况,则下一个元素是正常的,光标和拉斯特雷特都添加了1

  lastret <0;

  如果lastret小于0,则投掷illegalstateException异常,可以看出,在调用()被调用之前,必须调用next()方法以重置lastret的值,否则lastrt是collectionRemememove to collectionRememove to collection emplectremove。中间会直接抛出一个例外;

  CheckForcomodification();

  确定modCount和Expectionmodcount是否相等,并且未介导的consurrentModification Exception

  arraylist.this.remove(lastret);

  调用删除ArrayList的方法,删除元素

  光标= lastret;lastret = -1;ExpectModCount = modCount;

  将Lastret的值分配给光标,等效于-1;将lastrett重置为-1;将modCount分配给预期债券

  5.3光标= 0首先在ITR中;lastret = -1;modCount = 4;ExpectModCount = 4;请注意,ModCount的值是在调用ArrayList方法时执行modCount ++;和ExpectmodCount的第一个值。默认情况下,它等于ModCount。

  当foreach循环到d元素时,光标= 2;lastret = 1;modCount = 4;ExpectModCount = 4;

  列表列表之后。emove(s)删除元素“ d”,光标= 2;lastret = 1;modCount = 5;ExpectModCount = 4;注意

  由于ArrayList的foreach travers基本上等同于arrayList中的ITR迭代,因此当调用ITR内部类中的Next()方法时,ChackForComodification()方法的值比较了modCount和expectmodcount.concurrentModiCicionExcepion exception exciallent.concount.concountion()方法!

  5.4异常解决方案呼叫remove()调用迭代器的方法