首页 > 其他分享 >4-ArrayList

4-ArrayList

时间:2024-08-12 22:54:33浏览次数:8  
标签:10 调用 ArrayList add 数组 底层

ArrayList实现类(JDK1.7)

       //接口=实现类--->为了扩展性这样做--->因为可以Collection col = new LinkedList();
       Collection col = new ArrayList();
       List list = new ArrayList();
       //直接创建实现类对象
       ArrayList al = new ArrayList();
       /*
       ArrayList:
       底层的数组elementData--->数组类型:Object类型
       size:数组中的有效数据

       在JDK1.7中:在调用构造器的时候给底层数组elementData初始化,数组的初始化长度为10
        */

       al.add("abc");
       al.add("def");
  • 内存分析:

ArrayList1

  • 调用add方法

ArrayList2

扩容

  • size=10------>ArrayList底层会走grow(minCapacity)方法进行扩容
    1. 当数组中的10个位置都满了的时候就开始进行数组的扩容,扩容长度为原数组的1.5倍
    2. grow方法-->创建新数组--->长度为1.5倍
    3. 将原数组的内容复制到新数组中
    4. 将elementData指向新数组实现扩容
  1. ArrayList3

  2. ArrayList4

  3. 内存分析:

    ArrayList5

ArrayList(JDK1.8)

  • JDK1.8底层依旧是Object类型的数组,size是有效长度

  • ArrayList al = new ArrayList();---->调用构造器-->初始化为空{}的数组(而不是像1.7长度为10的数组)

    ArrayList6

  • 调用add方法(第一次调用add方法时,底层数组长度才变为10)

    1. ArrayList7
    2. ArrayList8
    3. ArrayList9
  • 扩容时候是一样的(size+1=11时---->扩容1.5倍)

    ArrayList10

总结

  • JDK1.7:底层数组,在调用构造器的时候,数组长度初始化为10,扩容的时候扩容为原数组的1.5倍
  • JDK1.8:底层数组,在调用构造器的时候,底层数组为{},在调用add方法以后底层数组才重新赋值为新数组,新数组的长度为10---->节省了内存,在add后才创建长度为10的数组

标签:10,调用,ArrayList,add,数组,底层
From: https://www.cnblogs.com/Mc9r4dy/p/18355890

相关文章

  • ArrayList集合及例题 day12
    packagecom.shujia.day13;importjava.util.ArrayList;importjava.util.Iterator;/*Collection:-List(有序【指的是存储和取出的顺序是一致的】且可以发生重复,且有索引的概念)-ArrayList:底层数据结构是数组,查询快,增删慢,线程不安......
  • 集合:(ArrayList)的插值和去重,包含(Iterator和listIterator)迭代器相关使用
    总结:去重用for循环,插值可用for循环和迭代器(可以方便在中间插值),如果要修改集合,就用listIterator,防止父类的Iterator没有add添加功能,也避免版本号不一致报错去重:用contains方法,确认新集合中是否存在旧值1、基本数据类型String去重publicclassArrayListQuChong{public......
  • ArrayList和LinkList实现的比较
    一、ArrayList和LinkList实现的比较1.使用get()获取元素1.1ArrayList.get()​ 如果希望使用ArrayList的get(intindex)方法获取元素,实现可以简单地将这项任务委托给其内部数组:publicEget(intindex){rangeCheck(index);returnelementData(index);}​ 当然,......
  • Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:
        集合介绍:                        是一组变量类型(容器),跟数组很像。一,引用集合的原因(必要性):                  A:数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。          B:使用数......
  • 面试考点分析( ArrayList和LinkedList对比)
    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.两者都是线程不安全,都实现了Collection接口。3.数据结构:ArrayList是基于动态数组的数据结构,LinkedList是基于双向链表的数据结构。性能:ArrayList支持随机访问,查询快,增删慢,查询的时间复杂度为O(1),插......
  • 搞定Java ArrayList,就看这一篇!
    大家好,我是小欧!今天我们来聊聊Java中的ArrayList。作为一个Java新手,初次接触ArrayList可能会觉得有点懵,不过不用担心,这篇文章会带你从零开始一步步搞定ArrayList。我们会从基础概念开始,然后逐步深入,最后通过几个实际案例来巩固学习成果。ArrayList是什么?简单来说,ArrayLis......
  • arraylist 源码解析
    参考Java集合源码分析(一)ArrayList【源码那些事】超详细的ArrayList底层源码+经典面试题史上最详细的Java集合类ArrayList源代码逐行深入解读JavaArrayList源码分析,带你拿下面试官(含扩容机制等重点问题分析)java进阶教程丨全面深入解析ArrayList原理(源码分析+面试讲解)......
  • Android开发 - List类中的CopyOnWriteArrayList实现类解析
    CopyOnWriteArrayList是什么CopyOnWriteArrayList是Java并发包(java.util.concurrent)中的一个并发安全的List实现类。它具有特定的设计,使得在并发场景下,读操作(如迭代)可以并发进行,而写操作(如添加、修改、删除)会进行一定的同步,但不会阻塞读操作主要特点和用法:线程安全......
  • Android开发 - ArrayList类动态数组与ArrayList<Fragment>解析
    什么是ArrayListArrayList是Java编程语言中的一个类,它实现了动态数组的数据结构。简单来说,ArrayList允许我们创建一个可以动态增长或缩减的数组,这在处理需要频繁添加或删除元素的情况下非常有用主要特点和用途动态大小:ArrayList的大小可以根据需要动态增长或缩减,与普通的数......
  • CopyOnWriteArrayList
    ArrayList是一个线程不安全的容器,如果在多线程环境下使用,需要手动加锁,或者使用Collections.synchronizedList()方法将其转换为线程安全的容器。否则,将会出现ConcurrentModificationException异常。CopyOnWriteArrayList是线程安全的,可以在多线程环境下使用。CopyOnWriteArr......