首页 > 编程语言 >Java中ArrayList

Java中ArrayList

时间:2024-12-03 18:30:38浏览次数:5  
标签:Java int ArrayList list newCapacity minCapacity 数组

文章目录

ArrayList

List接口特征:

  • 有序性:list中的元素是按照他们被添加的顺序存储的,可以通过索引来访问list中的元素。

  • 可重复性:list中可存储重复的元素

  • 索引访问:可以根据元素的索引值来访问list中的元素。

  • 支持迭代器:list实现了迭代器接口。(List接口继承Collections,Collections继承迭代器接口)

  • 支持泛型

ArrayList实现List接口,允许null元素,底层采用数组实现。为了追求效率,ArrayList没有实现同步,可以出现线程安全问题。

arrayList的自动扩容机制

当向数组中添加元素,会进行容量的检查。数据扩容通过一个公开方法ensureCapacity(int minCapacity)实现。可以手动调用,减少递增式再分配数量。扩容操作最终会通过grow()方法完成。

数组扩容,会将老数组的元素重新拷贝到一份到新的数组中,数组容量增长到大约原先的1.5倍。

    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

    private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0) // overflow
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ?
            Integer.MAX_VALUE :
            MAX_ARRAY_SIZE;
    }

System.arraycopy和Arrays.copyOf 的对比:

  • 作用:用来复制数组。

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)system.arraycopy本地方法,效率非常高。

  • public static <T> T[] copyOf(T[] original, int newLength),用来将一个数组复制到一个新的数组中,并且可以指定新数组的长度。

  • Arrays.copyOf只能用来复制对象类型的数组,返回一个泛型数组。优点易于使用和更加安全,会进行源数组的和目标数组的类型。

  • System.arrayCopy性能好,可以用来复制任意类型的数组。

ArrayList对于指定index的操作,首先会进行数组越界检查。

Fail-Fast操作

快速失败机制,通过记录modCount参数实现。在面对并发的修改时,迭代器很快就会完全失败。

标签:Java,int,ArrayList,list,newCapacity,minCapacity,数组
From: https://blog.csdn.net/2401_89378531/article/details/144221091

相关文章

  • java获取汉语拼音
    获取汉语拼音之前有个需求是要显示汉语拼音,然后找了一个工具包<!--汉语拼音--><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version></dependency>来个栗子HanyuPinyinOutputFo......
  • 计算机毕业设计必看必学96341+springboot养老院信息管理系统原创定制程序单片机,java
    目  录1绪论1.1研究背景和意义1.2开发意义1.3论文结构与章节安排2 养老院信息管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用......
  • 计算机毕业设计必看必学20599+springboot便利店管理系统原创定制程序单片机,java、PHP
    目  录摘要1绪论1.1课题目的与意义1.2国内外研究现状1.3论文结构与章节安排1.4Springboot框架介绍2 Springboot便利店管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2 系统功能分析2.2.1......
  • Java跨平台/可移植
    在探讨Java语言的特性时,其跨平台/可移植性无疑是一个核心亮点。以下是对Java跨平台/可移植性的详细阐述:一、Java跨平台/可移植性的概念Java语言的跨平台/可移植性指的是Java程序可以在不同的操作系统和硬件平台上运行,而无需对源代码进行修改或重新编译。这一特性使得Java......
  • JAVA NIO零拷贝实现
    文章目录JAVANIO零拷贝实现MappedByteBufferDirectByteBufferFileChannelJAVANIO零拷贝实现零拷贝通常通常指网络发送文件时,不需要把文件内容拷贝到用户空间,而直接在内核空间中传输到网络方式。通过减少不同内存区域的拷贝,减低CPU的消耗。javaNIO中**通道相当......
  • java定时任务cron表达式
    .常用cron表达式例子  (1)0/2****?表示每2秒执行任务  (1)00/2***?表示每2分钟执行任务  (1)0021*?表示在每月的1日的凌晨2点调整任务  (2)01510?*MON-FRI表示周一到周五每天上午10:15执行作业  (3)01510?6L2002-2006表示2002-2......
  • 【JavaEE初阶】落霞与孤鹜齐飞,秋水共长天一色 - (重点)线程
    本篇博客给大家带来的是线程的知识点,由于时间有限,分三天来写,本篇为线程第二篇.......
  • 怎么自己创建一个网站? 开发语言首选 java,使用CMS网站内容管理系统是不错的选择
    怎么自己创建一个网站推荐使用JavaCMS网站内容管理系统,根据网站规划的功能模块,创建不同的页面风格;文章目录怎么自己创建一个网站一、规划网站1.1确定网站主题和目的1.2规划网站结构和内容二、注册域名2.1选择域名注册商2.2查找并注册合适的域名三、选择网站托管......
  • 大厂Java面试经验套路总结
    前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么准备面试,哪怕是一些工龄比较长的“老开发”:有的人明知道有些问题肯定会被问,面试前还不......
  • [Javascript] Dealing with Number in Javascript
    Writebignumber//NOT100000//Better100_0001e5 Shorthandssyntaxforfloatingnumber//Normal0.123//Thesame.123//eXalsoapplytofloatingnumber3.14e10//31400000000console.log(0.123e10===.123e10)//true 8进制Startwith0⚠️ ......