【Java ArrayList】底层方法的自我实现

【Java ArrayList】底层方法的自我实现
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】
ArrayList是Java集合框架中List接口的动态数组实现,可以方便的存储和操作数据。它提供了一系列方法,便于我们进行增删查改,这篇文章是进行ArrayList的一个自我实现,让我们从底层更深度地理解ArrayList(顺序表)

文章目录:

一、 定义ArrayList类

arr : 创建一个整型数组,用来存储数据; usedSize : 有效数据,也就是真实的元素个数;
DEFAULT_CAPACITY:默认数组容量
MyArrayList():构造方法,初始化数组长度为默认的容量
publicclassMyArrayListimplementsIList{privateint[] arr;//存储数据privateint usedSize;//有效数据个数publicstaticfinalint DEFAULT_CAPACITY =10;//默认数组容量publicMyArrayList(){this.arr =newint[DEFAULT_CAPACITY];}

二、常见方法实现

ArrayList的常见方法如下:

在这里插入图片描述

1.add(int data):新增元素,添加在数组后面

publicvoidadd(int data){//判断顺序表是否满了if(isFull()){//扩容grow();}//存储this.arr[this.usedSize]= data;this.usedSize++;}publicbooleanisFull(){returnthis.usedSize ==this.arr.length;}publicvoidgrow(){this.arr =Arrays.copyOf(this.arr,2*this.arr.length);}
添加元素时,要先检查数组是否已满(isFull() 通过比较数组的长度和元素个数),如果满了,就要进行扩容grow(),这里是copy两倍的数组容量,然后再进行存储

2.add(int pos, int data):再pos位置添加元素

publicvoidadd(int pos,int data){//检查是不是满的if(isFull()){grow();}checkPos(pos,"add方法执行的时候pos位置不合法");//判断是不是放在usedSize位置if(pos == usedSize){ arr[pos]= data; usedSize++;return;}//如果放在前面,就要移动数据for(int i = usedSize-1; i >= pos; i++){ arr[i+1]= arr[i];} arr[pos]= data; usedSize++;}privatevoidcheckPosAdd(int pos,String msg){if(pos <0|| pos > usedSize){thrownewPosIllegalityException(msg);}}
在这里插入图片描述
还是先要检查容量是否已满isFull(),满了就要进行扩容grow(),然后添加时,要先检查pos位置是否合法,如上图,pos < 0 || pos > usedSize就是不合法的,在这个范围则会抛出我们自定义的PosIllegalityException异常,正常情况下进行添加:将pos位置及后面的元素统统向后移动一个位置,为要添加的元素腾出位置,然后有效数据usedSize++

3.contains(int toFind):判断是否包含某个元素

publicbooleancontains(int toFind){for(int i =0; i <this.usedSize; i++){if(arr[i]== toFind){returntrue;}}returnfalse;}
使用for循环遍历整个数组,if语句判断当前元素是否是你要找的元素toFind,是返回true,不是返回false

4.indexOf(int toFind):查找某个元素对应的位置

publicintindexOf(int toFind){for(int i =0; i <this.usedSize; i++){if(arr[i]== toFind){return i;}}return-1;}
同理:使用for循环遍历整个数组,if语句判断当前元素是否是你要找的元素toFind,是返回对应元素的下标i,不是返回-1

5.get(int pos):获取pos位置的元素

publicintget(int pos){if(isEmpty()){thrownewEmptyListException("当前顺序表为空");}checkPos(pos,"get方法的pos位置不合法");return arr[pos];}privatevoidcheckPos(int pos,String msg){if(pos<0|| pos >= usedSize){thrownewPosIllegalityException(msg);}}publicbooleanisEmpty(){return usedSize ==0;}
获取元素,先检查pos位置是否为空isEmpty(),如果为空,抛出我们的自定义异常EmptyListException,然后检查pos位置是否合法pos<0 || pos >= usedSize这个范围就是不合法的,抛出我们的自定义异常PosIllegalityException,最后就可以返回pos位置的元素

6.set(int pos, int value):给pos位置的元素设为value

publicvoidset(int pos,int value){if(isEmpty()){thrownewEmptyListException("当前顺序表为空");}checkPos(pos,"set方法执行的时候pos位置不合法"+pos); arr[pos]= value;}
替换时要先检查是否为空isEmpty(),为空抛出自定义异常EmptyListException,不为空检查pos位置是否合法,最后将给定的值替换指定的数组元素

7.remove(int toRemove):删除第⼀次出现的关键字key

publicvoidremove(int toRemove){if(isEmpty()){thrownewEmptyListException("当前顺序表为空");}//查找要删除数据的下标int index =indexOf(toRemove);if(index ==-1){System.out.println("没有你要删除的数据");return;}for(int i = index; i < usedSize-1; i++){ arr[i]= arr[i+1];} usedSize--;}//arr[usedSize] = null;如果是引用类型,需要手动置空
在这里插入图片描述
还是先检查是否为空,然后可以通过indexOf(toRemove)查找要删除的元素,如果index == -1,则没有你要删除的元素,如果有,进行覆盖删除,让后面的元素逐一向前移动一个位置直到你要,直到覆盖掉你要删除的元素,最后将有效元素usedSize–

8.size():获取顺序表⻓度

publicintsize(){returnthis.usedSize;}

9.clear():清空顺序表

publicvoidclear(){for(int i =0; i <this.usedSize; i++){ arr[i]=0;} usedSize =0;}

三、总结

这篇文章只是从深度的实现了一下ArrayList提供的一系列方法,以便于更好地去理解和使用ArrayList,让我们认识到了,数据结构的学习和使用,要考虑到所有方面,对我们的逻辑思维能力要求很高,同样也会提高我们这方面的能力,相关的其他内容后面会详细道来

Read more

飞算JavaAI编程助手在IDEA中的安装教程:本地安装、离线安装、在线安装方法大全

飞算JavaAI编程助手在IDEA中的安装教程:本地安装、离线安装、在线安装方法大全

飞算JavaAI编程助手安装教程:本地安装、离线安装、在线安装方法大全 摘要: 飞算JavaAI编程助手是一款为Java程序员量身定制的AI编程工具,支持多种IDEA版本(2020-2025)。本文将详细介绍如何通过在线、离线、本地三种方式安装飞算JavaAI编程助手。安装过程中将涵盖插件市场安装、离线包安装等步骤,帮助Java开发者提升编程效率。对于任何对AI编程助手感兴趣的开发者,本文提供了详细的安装图文教程和一些小技巧,确保安装过程顺利无阻。 飞算JavaAI编程助手简介 飞算JavaAI编程助手是专为Java程序员设计的AI编程工具,能够提升开发效率并减少重复性编程工作。该插件支持IDEA 2020-2025版本,功能强大,能够在编程时提供智能提示、自动补全和错误修正等服务。 文章目录 * 飞算JavaAI编程助手安装教程:本地安装、离线安装、在线安装方法大全 * 飞算JavaAI编程助手简介 * 支持的IDEA版本: * 方法一:在线安装 * 步骤一:打开插件市场 * 步骤二:安装完成效果 * 在线安装流程

By Ne0inhk
java官网下载jdk25的详细教程(下载、安装、配置环境变量)

java官网下载jdk25的详细教程(下载、安装、配置环境变量)

一、jdk(Java Development Kit)的下载与安装: 安装包下载:     链接:https://pan.baidu.com/s/1vOHtgborWy7uPgede5hstQ?pwd=nu6r 提取码: nu6r 官网下载:   www.oracle.com jdk8、jdk11、jdk17、jdk21、jdk25是LTS版本(长期支持版本),其他为普通版本(注:安装路径不要有中文、空格及其他特殊符号) 下载完成后安装,注意安装路径点击下一步 验证安装是否成功:   win+r 召唤运行窗口,输入cmd: 输入java+空格+version+回车: 二、jdk配置环境变量: 步骤一:找到java.exe的路径复制(D:\Javastudy\

By Ne0inhk
飞算JavaAI全链路实战:智能构建高可用电商系统核心架构

飞算JavaAI全链路实战:智能构建高可用电商系统核心架构

飞算JavaAI全链路实战:智能构建高可用电商系统核心架构 前言:AI编程新时代的电商系统开发范式变革 最近学习人工智能时遇到一个好用的网站给大家分享一下 人工智能学习 在当今数字经济时代,电商系统作为企业数字化转型的核心载体,其复杂度和技术要求与日俱增。一个完整的电商系统不仅需要处理商品、订单、用户等基础业务,还要应对高并发、分布式事务、数据一致性等复杂技术挑战。传统开发模式下,从需求分析到系统上线往往需要耗费大量人力和时间成本。 本次我通过飞算JavaAI平台,深入探索"电商系统核心功能模块"这一实战赛道,全面体验了从需求分析到代码生成的全链路开发过程。本文将完整呈现如何借助AI辅助开发工具,高效构建一个包含用户管理、商品系统、订单流程、支付集成等核心模块的电商平台,严格遵循"需求分析-开发实录-优化调试-成果总结"的四大核心框架,为开发者提供一份AI辅助全栈开发的完整实践指南。 一、需求分析与规划:构建电商系统的业务架构蓝图 在启动飞算JavaAI之前,需要进行全面的业务需求梳理和系统架构设计,这是确保AI生成代码符合预期的基础。 1.(理解需求)系统核心模块与

By Ne0inhk