展开

关键词

ArrayList

ArrayList(Collection<? extends E> c) public ArrayList(Collection<?

19930

ArrayList

ArrayList有用过吗?它是一个什么东西?可以用来干嘛? 因为我们在使用ArrayList的时候一般不会设置初始值的大小,那ArrayList默认的大小就刚好是10。 ? ArrayList(int initialCapacity)会不会初始化数组大小? 这是什么问题?卧槽问个ArrayList还能问到知识盲区? ? ArrayList用来做队列合适么? 队列一般是FIFO(先入先出)的,如果用ArrayList做队列,就需要在数组尾部追加数据,数组头部删除数组,反过来也可以。 论遍历ArrayList要比LinkedList快得多,ArrayList遍历最大的优势在于内存的连续性,CPU的内部缓存结构会缓存连续的内存片段,可以大幅降低读取内存的性能开销。

20520
  • 广告
    关闭

    腾讯云+社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ArrayList

    ArrayList简介   ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。 ArrayList 实现java.io.Serializable 接口,这意味着ArrayList支持序列化,能通过序列化去传输。    ArrayList 核心扩容技术 ```java //下面是ArrayList的扩容机制 //ArrayList的扩容机制提高了性能,如果每次只扩充一个, //那么频繁的插入会导致频繁的拷贝,降低性能, () = %d\n",arrayList.size()); arrayList.add(1); arrayList.add(3); arrayList.add arrayList.clear(); // 判断ArrayList是否为空 System.out.println("ArrayList is empty: " + arrayList.isEmpty

    17430

    DEBUG ArrayList

    1,ArrayList面试必问 说说ArrayList和LinkedList的区别? ArrayList基于数组实现,LinkedList基于链表实现,不同的数据结构决定了ArrayList查询效率比较高,而LinkedList插入删除效率比较高,反过来就比较慢了。 ArrayList默认初始容量为多少?按照几倍来扩容? 10,1.5倍。 说说数组扩容的原理? ArrayList扩容调用的是Array.copyof函数,把老数组遍历赋值给新数组返回。 说说ArrayList常见方法的时间复杂度? ArrayList和vector的区别 最大的区别在于线程是否安全 其次Vector是两倍扩容 最后就是在不指定大小的情况下,ArrayList容量初始化是在添加元素的时候,而Vector有一个无参构造器直接初始化为

    18420

    浅谈ArrayList

    一、ArrayList的继承体系和特点 ArrayList总体继承体系图如下: ? ArrayList的特点主要有以下几点: ArrayList在内存中分配连续的存储空间,可理解为长度可变的数组。 ArrayList存储元素可以重复,存储顺序和添加顺序一致。 二、ArrayList的用法 List<String> list = new ArrayList<String>();//使用多态创建ArrayList,泛型指定该ArrayList只能放String类型的元素 ArrayList的初始容量默认为10: ? ArrayList有两个构造方法: ? ? 综上所述,ArrayList的扩容会产生一个新的数组,将原来数组的值复制到新的数组中。会消耗一定的资源。所以我们初始化ArrayList时,最好可以估算一个初始的大小。

    18920

    Kotlin 的 val list: ArrayList= ArrayList() 居然报错!

    也许看了我们的题目,大家还没有明白过来到底发生了什么,那么我请大家再仔细看看: val list: ArrayList<String>= ArrayList() 好啦,其实这都不是什么大问题了,这篇文章探讨的那句代码本身就比较蛋疼: val list: ArrayList<String>= ArrayList() 我就问你为什么不去掉前面的类型,类型推导难道还不够吗 val list = ArrayList<String>() 或者在 >= 中间打一个空格嘛,这样就啥事儿没有了。

    37610

    ArrayList实现原理分析(Java源码剖析)ArrayList使用的存储的数据结构ArrayList的初始化ArrayList是如何动态增长ArrayList如何实现元素的移除ArrayList

    ArrayList使用的存储的数据结构 ArrayList的初始化 ArrayList是如何动态增长 ArrayList如何实现元素的移除 ArrayList小结 ArrayList是我们经常使用的一个数据结构 ,我们通常把其用作一个可变长度的动态数组使用,大部分时候,可以替代数组的作用,我们不用事先设定ArrayList的长度,只需要往里不断添加元素即可,ArrayList会动态增加容量。 ArrayList是作为List接口的一个实现。 那么ArrayList背后使用的数据结构是什么呢? ArrayList是如何保证动态增加容量,使得能够正确添加元素的呢? ArrayList的初始化 ArrayList提供了三个构造函数。 ArrayList小结 ArrayList是List接口的一个可变大小的数组的实现 ArrayList的内部是使用一个Object对象数组来存储元素的 初始化ArrayList的时候,可以指定初始化容量的大小

    44530

    集合之ArrayList

    ArrayList有用过吗?它是一个什么东西?可以用来干嘛? ArrayList可以通过构造方法在初始化的时候指定底层数组的大小。 ArrayList用来做队列合适么? 队列一般是FIFO(先入先出)的,如果用ArrayList做队列,就需要在数组尾部追加数据,数组头部删除数组,反过来也可以。 ArrayList的遍历和LinkedList遍历性能比较如何? 论遍历ArrayList要比LinkedList快得多,ArrayList遍历最大的优势在于内存的连续性,CPU的内部缓存结构会缓存连续的内存片段,可以大幅降低读取内存的性能开销。

    10720

    ArrayList 源码解析

    简介 ArrayList是一种变长的集合类,基于定长数组实现。 ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。 其他方面,ArrayList 是非线程安全类,并发环境下,多个线程同时操作 ArrayList,会引发不可预知的错误。 ArrayList大体和Vector一致,唯一区别是ArrayList非线程安全,Vector线程安全,但Vector线程安全的代价较大,推荐使用CopyOnWriteArrayList。 实现了该接口,说明ArrayList支持快速随机访问。

    17941

    ArrayList源码分析

    存储数据元素的数组 transient Object[] elementData; // non-private to simplify nested class access // 当前arraylist 的初始容量 */ public ArrayList(int initialCapacity) { if (initialCapacity > 0) { 三、add方法 /** * 一:直接添加数据元素到arraylist的尾部 */ public boolean add(E e) { //是否扩容、记录modCount = ArrayList.this.modCount) throw new ConcurrentModificationException(); } 复制代码 六、get方法 public E get b、假设有两个线程在操作同一个ArrayList,线程一执行step1(容量足够)后被挂起,线程二执行add()方法后,线程一被唤醒,这时线程一因为已经不再判断容量是否足够(已经判断过),执行step2

    15930

    ArrayList扩容详解

    本文探讨一下ArrayList的扩容过程 ArrayList底层是数组elementData,用于存放插入的数据。初始大小是0,当有数据插入时,默认大小DEFAULT_CAPACITY = 10。 如果在创建ArrayList时指定了initialCapacity,则初始大小是ArrayList 1. 是扩容前的数组长度右移一位 + 扩容前的数组长度 public class SimpleTest { public static void main(String[] args) { ArrayList list = new ArrayList(); int size = 0; for (int i = 0; i < 100; i++) { list.add size = getCapacity(list); } } } public static Integer getCapacity(ArrayList

    7220

    Java容器 ArrayList

    ArrayList到底能不能被序列化呢? 这里先说结论 ArrayList 是能被序列化的,有兴趣的同学可以做个实验,后面在回顾基础的时候会专门对序列化进行分析。 扩容 ArrayList 有三个构造函数 ArrayList(int initialCapacity) //指明容器大小 ArrayList() // 默认容器初始化大小 ArrayList(Collection 有很多资料说ArrayList 构造函数如果不指定大小,默认是10,这种说法是不严谨的。默认初始化后的大小其实是0,第一次扩容大小为10。 的操作都会修改modCount,如果在迭代的过程中ArrayList被修改就会触发快速失败。 使用规范 阿里的Java操作手册中有如下几点强制规范(这里引用一下): 【强制】ArrayList的subList结果不可强转成ArrayList

    29500

    ArrayList源码详解

    ArrayList UML类图 ? ArrayList 概述 ArrayList 是实现 List 接口的动态数组,所谓动态就是它的大小是可变的。 每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为 10。随着 ArrayList 中元素的增加,它的容量也会不断的自动增长。 在每次添加新的元素时,ArrayList 都会检查是否需要进行扩容操作,扩容操作带来数据向新数组的重新拷贝,所以如果我们知道具体业务数据量,在构造 ArrayList 时可以给 ArrayList 指定一个初始容量 如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。 public ArrayList(Collection<?

    31550

    ArrayList底层实现

    package java.util; public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess /** * 默认的长度 */ private static final int DEFAULT_CAPACITY = 10; /** * 在new ArrayList Object []一个空的对象 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 这个就是ArrayList elementData; /** *集合的大小 */ private int size; /** *可以指定长度 */ public ArrayList 可以传进来一个集合,这里转成数组之后传给elementData * 然后判断是否是object[]类型,若不是则复制一个给elementData */ public ArrayList

    32890

    ArrayList源码解析

    ArrayList是我们使用频率非常高的一个集合,也是集合中相对比较简单的集合。是List接口的主要实现类。一般面试的时候经常会问到ArrayList和LinkedList的区别。 public ArrayList(int initialCapacity); public ArrayList(); public ArrayList(Collection<? list2 = new ArrayList<>(3); // 传入一个集合 List<String> list3 = new ArrayList<>(list1); ArrayList原理 介绍完了这几个构造方法,我们先来讲讲ArrayList的原理。 Q1:ArrayList为什么可以存储元素? 首先介绍一下ArrayList类中的五个核心成员变量。

    8410

    ArrayList 源码解析

    今天就来说说我们开发中常用的ArrayList源码 ArrayList几个重要的成员变量 和String源码解析开篇一样,我们还是先来看看ArrayList类的基本结构。 比如说:扩容 如果ArrayList的本质是一个数组,数组结果一旦被创建之后就不能被改变了,那么ArrayList是怎么实现动态扩容的 从上文的分析可以得到ArrayList的本质就是一个数组,初始为空数组 ArrayList的类注释 要看一个类的源码,就必须的先看看这个类的类注释。由于ArrayList的类注释很长,且都是英文的,为了节省大家的时间,我将其翻译成英文并提取出重要信息如下。 ; } // 使用已存在的集合初始化ArrayList public ArrayList(Collection<? ArrayList 允许 null 值 ArrayList 最大容量是 Integer.MAX_VALUE add 方法并不是线程安全的。

    15820

    ArrayList源码分析

    当前数组中真正存放的元素个数 构造器 提供了三种构造器,分别是无参、指定大小、指定初始数据的构造器 // 无参构造器,初始化为一个空数组,在第一次add操作时将数组扩容为默认初始数组大小10 public ArrayList () { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } // 指定初始大小 public ArrayList initialCapacity); } } // 指定初始数据 public ArrayList 将最后一个元素的引用置null,帮助GC清理,否者会产生内存泄露 elementData[--size] = null; // clear to let GC do its work } ArrayList

    10520

    ArrayList源码阅读

    前言 数组是我们最常用最简单的数据结构,Java里对数组做了一个简单的包装,就是ArrayList,提供自动扩容的功能。 可以注意到这是一个static变量,也就是说所有的ArrayList对象共享这个变量。由此可以猜测,这是一个临时值。 * The capacity of the ArrayList is the length of this array buffer. 我们知道,ArrayList实现了Serializable接口,为什么不允许序列化data呢? 由于过程中没有加锁,ArrayList也不是线程安全的。

    34880

    ArrayList深度解析

    目录: ArrayList集合底层数组创建和扩容机制 ArrayList的构造方法 优化ArrayList 以下测试源码均使用JDK1.8 1 ArrayList集合底层数组创建和扩容机制 ① 通过源码中查看到elementData属性是ArrayList的底层数组。 public static void main(String[] args) { ArrayList arrayList=new ArrayList(); //获取类对象 它通过迭代器返回的顺序构建一个ArrayList集合。 3 优化ArrayList 了解了ArrayList的创建机制,就要想办法优化它。 解决方式: ① 构造方法 在构造ArrayList时传入一个整型,就会直接构造一个该长度的集合,避免一直扩容造成的资源浪费。

    7020

    扫码关注腾讯云开发者

    领取腾讯云代金券