引言

我们知道数组在使用过程中是定长的,如果当原数组满了之后,我们要存储更多元素就只能重新创建一个新的更长的数组,这样就很麻烦。而且还没办法去删除数组中的元素。那有没有一种数组可以动态存储数据呢,当我们数组元素满了,数组会自动增加空间,我们想删除那一个元素就可以删除。在Java中是有这样的存在的,那就是集合。但是他是怎么实现的呢?

怎么实现动态数组?

其实就等同于怎么去实现ArrayList集合

一、我们要实现怎样的功能

1.我们应该怎样去定义这个数组

在Java中,我们直接去操作这个数组,是没办法达到我们想要的效果的。想实现那些功能,我们可以将定义一个类,这个类产生的对象数组,那些功能可以定义成一个个成员方法,这样就可以达到我们想要的效果。
代码实现:

public class MyArray {private int[] data;private int size;//既可以表示当前数组存储了多少个元素,也可以表示当顺序存储下一个元素时,元素的索引。//无参构造器public MyArray() {//当用户没有规定数组的长度时,默认生成一个长度为10的数组。this(10);}public MyArray(int count) {this.data = new int[count];}}

下面就是去写这个类里面的一个个成员方法。所谓成员方法就是这个动态数组的一个个功能。
我们的目的就是去弥补我们常用数组的不足之处,那么,我们动态数组就有以下功能:

2,数组的自动扩容

当数组空间已满的时候,我们要继续去存数据,就需要给数组增加空间,所以我们可以给这个动态数组增加一个自动扩容的功能。
代码实现:

    public void grow() {int data[] = new int[this.data.length * 2];for (int i = 0; i < size; i++) {data[i] = this.data[i];}this.data = data;}

3.删除元素

a.按照索引删除,并返回删除元素的值;
b.按照元素的值删除,删除成功返回true,删除失败返回false;
c.删除数组中所有值为给定值的元素;
d.按照元素的值去删除,并返回他的索引;
e.删除第一个元素,并返回它的值
f.删除尾部元素,并返回它的值
代码实现:

   /*** 删除数组中索引为index的元素,并返回它的值。*/public int remove(int index) {if (index < 0 || index > size) {return -1;}int a = data[index];for (int i = index; i < size - 1; i++) {data[i] = data[i + 1];}size--;return a;}//删除第一个元素,并返回它的值public int removeFirst() {return remove(0);}//删除尾部元素,并返回它的值public int removeLast() {return remove(size - 1);}//删除在这个数组中第一个值为val的元素,并返回他的索引;public int removed(int Val) {for (int i = 0; i < size; i++) {if (data[i] == Val) {remove(i);return i;}}return -1;}// 实现删除数组中所有值为Val的元素,并且返回他们的索引。public MyArray delete(int Val) {MyArray m2 = new MyArray();for (int i = size - 1; i >= 0; i--) {if (data[i] == Val) {remove(i);m2.add(i);}}return m2;}//删除在这个数组中第一个值为val的元素,并返回他的索引;public boolean removed1(int Val) {for (int i = 0; i < size; i++) {if (data[i] == Val) {remove(i);return true;}}return false;}

4.查找元素

a.按照索引查找
b.按照值查找
代码实现:

   /*** 查询一个数Val在不在数组中,在则返回true,不在则返回false。*/public boolean select(int Val) {for (int i = 0; i < size; i++) {if (data[i] == Val) {return true;}}return false;}//查询一个数Val在不在数组中,在则返回他的索引public int selectAll(int Val) {for (int i = 0; i < size; i++) {if (data[i] == Val) {return i;}}return -1;}//查询一个索引位index的数组元素,返回它的值public int selected(int index) {if (index < 0 || index > size) {System.out.println("索引错误");}return data[index];}

5.修改元素

a.修改索引为index的元素的值为Val
b.将数组中第一个元素值为Val的值修改我Val1
代码实现:

   /*** 将数组中索引为index的元素的值修改为Val,并返回他原来的值。*/public int amend(int index, int Val) {if (index < 0 || index > size) {System.out.println("错误");}int a = data[index];data[index] = Val;return a;}//将数组中第一个值为Val的修改成Val1,并返回他的索引;public int amendVal(int Val, int Val1) {for (int i = 0; i < size; i++) {if (data[i] == Val) {data[i] = Val1;return i;}}return -1;}//将数组中的第一个数修改为Val,并返回原来的值public int amendFrist(int Val) {return amend(0, Val);}//将数组中的最后一个数修改为Val,并返回原来的值public int amendLast(int Val) {return amend(size - 1, Val);}// :将数组中所有值为Val的元素的值修改为Val1,并且返回他们的索引。public MyArray reValue(int Val, int Val1) {MyArray m2 = new MyArray();for (int i = size - 1; i >= 0; i--) {if (data[i] == Val) {data[i] = Val1;m2.add(i);}}return m2;}

5.增加元素

代码实现:

    /*** index位置增加一个元素Val*/public void addIndex(int index, int Val) {if (index < 0 || index > size) {System.out.println("添加位置错误");return;}if (size == 0) {data[0] = Val;size++;return;}for (int i = size; i >= index; i--) {if (i == index) {data[index] = Val;} else {data[i] = data[i - 1];}}size++;if (size == data.length) {grow();}}//在首部增加一个元素public void addFrist(int Val) {addIndex(0, Val);}//在尾部增加一个元素,默认的添加方式public void add(int Val) {addIndex(size, Val);}

二、toString方法的重写

在我们使用System.out.println();打印输出时,默认调用的就是toString方法,但是这个方法发在打印数组和对对象时,打印的是对象名这个变量的存储地址。因此,如果我们想使用那个方法打印一个数组,就如要对toString方法进行重写。
代码示例:

    /*** 重写toString方法*/public String toString() {String ret = "[";for (int i = 0; i < size; i++) {ret += data[i];if (i != size - 1) {ret += ",";}}ret += "]";return ret;}

Java-实现动态数组(ArrayList<Integer>集合)相关推荐

  1. java二维数组添加元素_Java二维数组与动态数组ArrayList类详解

    java二维数组 java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  2. 基于Java实现动态数组

    Java基本动态数组 动态数组的基本原理 动态扩容 泛型 动态数组的基本实现 动态数组的基本结构 初始化数组ArrayList 返回数组元素个数Size()与判空 索引越界异常函数Check() 获取 ...

  3. 动态数组ArrayList c# 1613536290

    动态数组ArrayList c# 1613536290 导入命名空间 using System.Collections; 实例化对象 空对象 ArrayList 对象 = new ArrayList( ...

  4. java String转数组||String转集合||将字符串转化为数组

    java String转数组||String转集合||将字符串转化为数组 如果你和我一样你们公司有人这样存数据的话 这就很气人,如果用分割的方法的话 还需要去除前后两个中括号,还有两个双引号要分割,气 ...

  5. 数据结构-动态数组(ArrayList)

    什么是数据结构? 数据结构就是计算机用来进行存储,组织数据的方式, 也可以想象成一个容器,用来装载数据. 常见的数据结构有以下三种分类: 而每一种数据结构则根据不同的场合以及不同的需求根据情况选择使用 ...

  6. arraylist 初始化_Java二维数组和动态数组ArrayList 类

    Java二维数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  7. java动态数组的实现的_基于Java的动态数组分析与实现

    动态数组 概念 基于Java提供的静态数组封装自己的动态数组,动态数组涉及的组成部分如下图所示. 组成部分解读data:静态数组,通过泛型支持多种类型的元素:private E[] data;. si ...

  8. C#动态数组ArrayList介绍

    ArrayList是一种动态数组,其容量可随着我们的需要自动进行扩充. ArrayList位于System.Collections命名空间中,所以我们在使用时,需要导入此命名空间. 下面,我们还是在S ...

  9. JAVA实现动态数组【代码】

    package arr;public class ArrayList {private int size;private int[] element;private static final int ...

最新文章

  1. 【Python】keras卷积神经网络识别mnist
  2. LeetCode:925. Long Pressed Name
  3. 美国国家科学院发布《材料研究前沿:十年调查》
  4. IE8抢先尝试——色眼窥观版(多图)
  5. Mac OS Mountain Lion 下的Wireshark
  6. php jquery选择器,常用jQuery选择器总结_jquery
  7. Python基础知识一
  8. web项目中遇到的Maven包依赖冲突问题解决
  9. STL 之for_each,transform
  10. python命令行进入帮助模式_python命令行模式直接查看帮助
  11. 贝叶斯公式设b_数据分析经典模型——朴素贝叶斯
  12. 11 - java构造方法
  13. XenApp_XenDesktop_7.6实战篇之十二:组策略配置
  14. 机器学习-吴恩达-笔记-6-应用机器学习的建议
  15. easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
  16. UML统一建模语UML2和EnterpriseArchitect
  17. 关于磁力计和加速度计的融合以及坐标系的对准
  18. (转)常见数学符号及公式英文发音大全
  19. 【Android】EasyClient与EasyCamera的移植学习
  20. 为什么Java编程语言用一种咖啡名做名字

热门文章

  1. 手机邮箱接收邮件服务器如何,手机电子邮箱接收和发送的服务器地址是多少?...
  2. 钢铁侠是怎样炼成的:一段给人启示的英雄传奇
  3. 408 计算机学,问一下 今年计算机考408的有哪些学校?
  4. 墨尔本皇家理工计算机研究生,墨尔本皇家理工大学计算机科学硕士研究生申请要求及申请材料要求清单...
  5. 拿着阿里这份Java性能调优手册,我把公司项目性能提升了300%
  6. IDEA导入项目无法识别
  7. 黑威联 QNAP NAS 通挂载外部存储使用相册套件
  8. c语言界面函数,C语言图形界面常用函数集锦
  9. Python技法之简单递归下降Parser的实现方法
  10. FastStone Capture—截图处理