首页
学习
活动
专区
圈层
工具
发布

数据结构之ArrayList

首先:讲述ArrayList之前先来说下List,List是java重要的数据结构之一,我们经常接触到的有ArrayList、Vector和LinkedList三种,他们都继承来自java.util.Collection...从中可以大致了解集合类之间的关系 本篇主要讲述 Arraylist Arraylist初始化方法,最简短的 List strings = new ArrayList(asList...在使用ArrayList的时候,应注意ArrayList并不是线程安全的,如果需要多线程并发操作应当使用CopyOnWriteArrayList(读远大于写的情况),或者使用Collections工具类的...❤️❤️❤️2、LinkedList使用了双向链表数据结构,与基于数组实现的ArrayList和Vector相比,这是一种不同的实现方式,这也决定了他们不同的应用场景。...在大数据量频繁的调用过程中,对性能会有所影响。

39540

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

ArrayList使用的存储的数据结构 ArrayList的初始化 ArrayList是如何动态增长 ArrayList如何实现元素的移除 ArrayList小结 ArrayList是我们经常使用的一个数据结构...ArrayList是作为List接口的一个实现。 那么ArrayList背后使用的数据结构是什么呢? ArrayList是如何保证动态增加容量,使得能够正确添加元素的呢?...需要说明的是,本文所分析的源码引用自JDK 8版本 ArrayList使用的存储的数据结构 从源码中我们可以发现,ArrayList使用的存储的数据结构是Object的对象数组。...ArrayList的初始化 ArrayList提供了三个构造函数。...ArrayList小结 ArrayList是List接口的一个可变大小的数组的实现 ArrayList的内部是使用一个Object对象数组来存储元素的 初始化ArrayList的时候,可以指定初始化容量的大小

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

    【重学数据结构】数组 ArrayList

    数组是一种线性表的数据结构,是一个存储相同数据类型的集合,每个相邻元素的物理内存地址也相邻。...--size] = null; return oldValue; } 首先需要计算出删除此元素所要移动的元素数,也就是numMoved 使用System.arraycopy拷贝数据的方式去移动数据...,把删除掉的元素的位置覆盖掉 然后把末尾的数据(移动后为脏数据)置为null  获取元素 @Override public E get(int index) { return...System.out.println(list); list.remove(9); System.out.println(list); }  测试结果 常见问题  数据结构中有哪些是线性表数据结构...ArrayList在首次添加元素之前,底层数组是一个空数组,在首次添加元素的时候自动扩容到10。 ArrayList 中扩容的范围是多大一次?

    12610

    ArrayList

    有用过,ArrayList就是数组列表,主要用来装载数据,当我们装载的是基本类型的数据int,long,boolean,short,byte…的时候我们只能存储他们对应的包装类,它的主要底层实现是数组Object...您说它的底层实现是数组,但是数组的大小是定长的,如果我们不断的往里面添加数据的话,不会有问题吗? ArrayList可以通过构造方法在初始化的时候指定底层数组的大小。...然后把原数组的数据,原封不动的复制到新数组中,这个时候再把指向原数的地址换到新数组,ArrayList就这样完成了一次改头换面。 ?...ArrayList插入删除一定慢么? 取决于你删除的元素离数组末端有多远,ArrayList拿来作为堆栈来用还是挺合适的,push和pop操作完全不涉及数据移动操作。 那他的删除怎么实现的呢?...ArrayList用来做队列合适么? 队列一般是FIFO(先入先出)的,如果用ArrayList做队列,就需要在数组尾部追加数据,数组头部删除数组,反过来也可以。

    1.1K20

    【Java数据结构】---List(ArrayList)

    今天先开始我们熟悉的顺序表(ArrayList)的具体内容。 线性表 之前C语言部分也学习过顺序表,我们这里就简单说明。 线性表(linear list)是n个具有相同特性的数据元素的有限序列。...线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…(之后都会学习到) 线性表在逻辑上是线性结构,也就说是连续的一条直线。...顺序表(MyArrayList) 顺序表是**用一段物理地址连续的存储单元依次存储数据元素的线性结构**,一般情况下采用数组存储。...在数组上完成数据的增删查改 因为ArrayList是集合框架下的一个普通的类,他的增删查改可以由编译器实现。我们要做的就是自主实现这些功能,增强对代码的理解。...如果这个系列博客对你有帮助的话,可以点一个免费的赞并收藏起来哟~ 可以点点关注,避免找不到我~ ,我的主页:optimistic_chen 我们下期不见不散~~Java 下期预告: 【Java数据结构

    7810

    【数据结构】 ArrayList深入解析

    : 1.第一种正常参数的方法: 当传递参数数为一个数值时,会按以下规则处理: 若该数值大于0,则创建一个长度为此数值的数组 若该数值等于0,则使用空数组来存储数据 若该数值小于0,则抛出异常...list); list.clear(); System.out.println(list); } 这个时候,我们可以观察没有传递任何参数,但是却能打印,我们可以看到这个构造方法是真正存放数据的数组等于默认容量置空数组...} } private Object[] grow() { return grow(size + 1); } 我们会发现,没有进行传递参数的构造方法时,那么真正存放数据的数组就等于默认置空数组...扩容时会申请新内存、拷贝旧数据、释放旧内存,存在性能开销,建议初始化时预估容量(如 new ArrayList(100))。 2.2.3 批量添加元素(addAll(Collection<?...扩容的性能开销 扩容时需申请新内存、拷贝旧数据、释放旧内存(默认扩容为原容量的 1.5 倍),频繁扩容会浪费资源。建议初始化时预估容量(如 new ArrayList(1000))。

    10610

    ArrayList

    在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为O(n),求表长以及增加元素,取第 i 元素的时间复杂度为O(1)   ArrayList 继承了AbstractList,实现了...private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** * 保存ArrayList数据的数组...数据的数组的长度的话,就需要调用grow(minCapacity)方法扩容。...*/ private void grow(int minCapacity) { //elementData为保存ArrayList数据的数组 ///elementData.length...作用:对于大数据的2进制运算,位移运算符比那些普通运算符的运算要快很多,因为程序仅仅移动一下而已,不去计算,这样提高了效率,节省了资源   比如这里:int newCapacity = oldCapacity

    1.4K30

    【JAVA数据结构】(ArrayList)顺序表

    ArrayList 是Java集合框架中的一个类,底层使用的数据结构就是顺序表,它实现了List接口,提供了动态数组的功能,ArrayList可以根据需要自动进行扩容(不指定容量大小也能正常添加元素)...; } } //删除第一次出现的数据元素value public void remove(int toRemove) { //先查看是否有这个元素在顺序表中...int index = this.indexOf(toRemove); if(index == -1){ System.out.println("没有这个数据...在pos位置插入元素data list.add(1,3); //在1下标插入数据元素3 System.out.println(list.toString()); // [...O(n)(需要将后面所以的元素进行移动) ② 存放数据时的扩容机制是为1.5倍或2倍扩容,可能会导致内存空间的浪费 希望对你帮助

    28110

    ArrayList详解

    一、概述 1、概述 基于数组实现,查询快,增删慢; 没有同步锁,多线程不安全; 自动扩容,使用方便; 2、基于数组实现,查询快,增删慢 ArrayList底层基于数组实现,元素连续存储...之前的元素到新的数组 * 效率较低,最好初始化一个较为合适的长度,减少扩容次数 */ // 无参构造,赋值一个空数组,当添加第一个元素的时候初始化容量为10 public ArrayList...{ this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } // 指定初始容量大小的构造函数 public ArrayList...1、概述 * 1、使用List list = new Vector();,这个答案对,但是一个很笨拙的答案;(不推荐) * 2、让ArrayList变得安全:List...list = Collections.synchronizedList(new ArrayList());(不推荐) * 3、JUC的解决方案:List list = new CopyOnWriteArrayList

    42610
    领券