数组容器(ArrayList)设计与Java实现,看完这个你不懂ArrayList,你找我!!!

本文详述ArrayList的基本功能,包括增删改查,并探讨设计原理,如初始大小设定与扩容机制。通过代码实现,解释如何创建自己的数组容器,特别强调了插入、删除操作的逻辑。文章结尾预告对更多高级特性的分析。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

数组容器(ArrayList)设计与Java实现

本篇文章主要跟大家介绍我们最常使用的一种容器ArrayListVector的原理,并且自己使用Java实现自己的数组容器MyArrayList,让自己写的容器能像ArrayList那样工作。在本篇文章当中首先介绍ArrayList的一些基本功能,然后去分析我们自己的容器MyArrayList应该如何进行设计,同时分析我们自己的具体实现方法,最后进行代码介绍!!!

ArrayList为我们提供了哪些功能?

我们来看一个简单的代码,随机生成100个随机数,查看生成随机数当中是否存在50这个数。

public class MyArrayList {

  public static void main(String[] args) {
    Random random = new Random();
    ArrayList list = new ArrayList<>();
 for (int i = 0; i < 100; i++) {
 list.add(random.nextInt(5000));
 }
 for (int i = 0; i < 100; i++) {
 if (list.get(i) == 50) {
 System.out.println("包含数据 50");
 }
 }
 list.set(5, 1000);// 设置下标为5的数据为100
 list.remove(5);// 删除下标为5的数据
 list.remove(new Integer(888));// 删除容器当中的第一个值为5的数据
 }
}


上述代码包含了ArrayList最基本的一个功能,一个是add方法,向数组容器当中加入数据,另外一个方法是get从容器当中拿出数据,set方法改变容器里的数据,remove方法删除容器当中的数据。ArrayList的很多其他的方法都是围绕这四个最基本的方法展开的,因此我们在这里不仔细介绍其他的方法了,后面我们自己实现的时候遇到问题的时候自然会需要设计相应的方法,然后我们进行解决即可。

现在我们就需要去设计一个数组容器实现“增删改查”这四个基本功能。

设计原理分析

首先明白一点我们需要使用什么工具去实现这样一个容器。我们手里有的工具就是Java提供给我们的最基本的功能——数组(这个好像是废话,我们的标题就是数组容器🤣)。

当我们在Java当中使用数组去存储数据时,数据在Java当中的内存布局大致如下图所示。

我们在设计数组容器这样一个数据结构的时候主要会遇到两个问题:

  • 我们申请数组的长度是多少。
  • 当数组满了之后怎么办,也就是我们的扩容机制。

对于这两个问题,首先我们数组的初始大小可以有默认值,在我们自己实现的MyArrayList当中设置为10,我们在使用类时也可以传递一个参数指定初始大小。第二个问题当我们的数组满的时候我们需要对数组进行扩容,在我们实现的MyArrayList当中我们采取的方式是,新数组的长度是原数组的两倍(这个跟JDKArrayList方式不一样,ArrayList扩容为原来的1.5倍)。

代码实现

为了让我们的类实现的更加简单我们在代码当中就不做很多非必要的逻辑判断并且抛出异常,我们的代码只要能表现出我们的思想即可。

  • 首先定义一个接口MyCollection,表示我们要实现哪些方法!
public interface MyCollection {

 /**
 * 往链表尾部加入一个数据
 * @param o 加入到链表当中的数据
 * @return
 */
 boolean add(E o);

 /**
 * 表示在第 index 位置插入数据 o
 * @pa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值