java学习--简单分析arraylist实例化的过程(代码片段)

庸人冲 庸人冲     2023-01-08     445

关键词:

ArrayList作为List接口的实现类,是Java为我们提供的一个容器,它对应着数据结构中的顺寻表结构,并且提供了一组针对于表中元素的增删改查操作。这里主要是简单分析一下ArrayList实例化的过程,以及它的扩容机制,这可以有助于我们更加深刻的理解顺序表结构,以及更好的使用ArrayList。如果有不正确地方,还请大佬们可以指出。

实例化

ArrayList中提供了3种重载的构造器:

  1. ArrayList()
ArrayList<Integer> list = new ArrayList<>();

  1. ArrayList(int initialCapacity)

    指定初始化容量

List<Integer> list = new ArrayList<>(255);

  1. ArrayList(Collection<? extends E> c)

Collection的实现类作为参数实例化ArrayList对象,该构造器会将参数对象中存储的元素拷贝到实例化的ArrayList对象中。

Collection<Integer> collection = new ArrayList<>(1);
List<Integer> list = new ArrayList<>(collection);  // 参数的泛型必须是实例化对象指定的泛型或其子类

自动扩容

ArrayList()添加元素使用add()方法,该方法提供了几种重载形式,此处主要介绍add(E e)方法,以及在添加过程中的扩容机制。

总结

  1. ArrayList在实例化时,如果使用空参构造器指定初始化容量为0或者指定的集合为空集合(数组长度为0),则在初始化时默认指向了一个共享的空数组,长度为0。这是JDK8.0之后的改变,目的是节省资源。
  2. 当第一次添加元素时,才会在底层为该对象创建数组。如果使用空参构造器实例化list,则数组默认容量为10。
  3. 如果是其它另外两种情况,则数组默认容量为1。(size + 1)
  4. 当需要扩容时,会对数组进行1.5倍的扩容。

建议:在开发中使用带参构造器:ArrayList(int capacity);,目的是为了防止数组频繁扩容,提高效率。

java容器----arraylist简单分析

...题)。容器类经常使用到的有三种:Map,List,Set;先记录下ArrayList(最简单) ArrayList是List类的一种,继承AbstractList,并实现List<E>, RandomAccess, Cloneable, java.io.Serializa 查看详情

java.util.arraylist源码分析

publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.io.Serializable可变数组大小的List实现,允许所有的元素,包括null。(该类可粗略地看作是Vector,除了它不是同步化的)size、isEmpty、get、set 查看详情

java:effectivejava学习笔记之通过私有构造器强化不可实例化的能力(代码片段)

Java通过私有构造器强化不可实例化的能力通过私有构造器强化不可实例化的能力参考通过私有构造器强化不可实例化的能力并非所有的类都是需要实例化的。有时候,我们可能需要编写至包含静态方法和静态域的类。这些类... 查看详情

java入门学习:javahashmap实例源码分析

  本文来源:http://www.zretc.com/technologyDetail/464.html  Entry是Map接口中的一个内部接口,它是实现键值对存储关键。在HashMap中,有Entry的实现类,叫做Entry。Entry类很简单,里面包含key,value,由外部引入的hash,还有指向下一个En... 查看详情

你真的懂java的arraylist吗?

你真的懂Java的ArrayList吗?1.为什么需要ArrayList?2.ArrayList底层是如何实现的?3.结合源码分析主要成员变量4.个人的一点总结1.为什么需要ArrayList?图1图2记得在刚刚学习Java的时候,我们首先是学习了数组,... 查看详情

java学习过程的简单记录

1、LinkedList与ArrayList的区别1)、LinkedList是基于链表的数据结构,ArrayList是实现了基于动态数组的数据结构;2)、对于查询(get),ArrayList比LinkedList效率高,因为LinkedList要移动指针     对于新增(insert)和删除(remove... 查看详情

数据结构:用实例分析arraylist与linkedlist的读写性能(代码片段)

目录背景ArrayListLinkedList实例分析1、增加数据2、插入数据3、遍历数据3.1、LinkedList遍历改进总结背景ArrayList与LinkedList是Java编程中经常会用到的两种基本数据结构,在书本上一般会说明以下两个特点:对于需要快速随机访问元素... 查看详情

容器_jdk源码分析_自己简单实现arraylist容器

...sp;       这几天仔细研究下关于ArrayList容器的jdk源码,感觉收获颇多,以前自己只知道用它,但它里面具体是怎样实现的就完全不清楚了。于是自己尝试模拟写下java的ArrayList容器,简单了实现的ArrayList... 查看详情

java设计模式——简单工厂

工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。我看有的书上和有的文章里是分为两种,没有简单工厂。工厂模式主要的作用是:一个对象在实例化的时候可以选择多个类,在实例化的时候根据一些业务规则... 查看详情

effectivejava学习笔记之不可实例化的类

在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但... 查看详情

arraylist源码阅读分析(jdk1.8)

     ArrayList也是我们开发过程中常用的集合之一,虽然实现原理比较简单,但是还是通过本文简单的介绍和分析下,底层是用Object数组实现的,下面直接进入正题。一、  ArrayLis的默认构造函数说明 &... 查看详情

guava学习--集合1

...和操作的静态方法,我们简单的依次进行说明,如下:newArrayList():构造一个可变的、空的ArrayList实例。newArrayList(E...elements):构造一个可变的包含传入元素elements的ArrayList实例。newArrayList(Iterable<?extendsE>e 查看详情

java集合源码分析—arraylist(代码片段)

ArrayList源码分析ArrayList结构publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.io.SerializableArrayList继承自AbstractList,实现了List、RandomAccess、cloneable、Serializable接口,支持随机访问、克隆和序... 查看详情

单例模式的简单分析

...次写东西,文体形式槽点多多,欢迎指正。本文旨在交流学习,欢迎大神拍砖。 单例模式是设计模式中比较简单的一个,学习起来比较容易理解。下面开始聊聊各种场景下的单例模式。单例模式的定义:    一... 查看详情

arraylist源码分析(代码片段)

ArrayList简介ArrayList核心源码ArrayList源码分析System.arraycopy()和Arrays.copyOf()方法两者联系与区别ArrayList核心扩容技术内部类ArrayList经典DemoArrayList简介  ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能... 查看详情

内存泄漏学习案例-1-arraylist

解决内存泄漏于是赶快登陆探测服务器,首先是 topfreedf 三连,结果还真发现了些异常。我们的探测进程CPU占用率特别高,达到了900%。我们的Java进程,并不做大量CPU运算,正常情况下,CPU应该在100~200%之间,出现这种CPU... 查看详情

java对象实例化的方式

java对象实例化的方式有以下几种:1、使用new2、工厂模式3、反射4、clone()方法5、反序列化方式/**实现Cloneable和Serializable接口*/publicclassBookimplementsCloneable,Serializable{privatestaticfinallongserialVersionUID=1L;privateIntegerserialNum;/ 查看详情

多线程简单实例

主函数:package com.thread;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class WorkThreadSample { public static void m 查看详情