众所周知,在Java中,数组的特点是

        > 数组是用来存储一组有序的数据的容器> 数组中存储数据的地址是连续的> 数组中存储数据的类型是一致的> 数组一旦创建、长度不可改变

因此,数组也有缺点,比如说,数组一旦创建,长度不可改变。这样的话,就不怎么利于我们的使用。我们学习的数组都是静态数组,其实在很多的时候,静态数组根本不能满足我们编程的实际需要,比方说我们需要在程序运行过程中动态的向数组中添加数据,这时我们的静态数组大小是固定的,显然就不能添加数据,要动态添加数据必须要用到动态数组,动态数组中的各个元素类型也是一致的。

在我们的学习使用中,经常要对数组进行 增加、删除、改变元素、查找元素等等...一系列操作。所以普通的数组已经满足不了我们的需求,哪有什么办法可以解决这个问题?在这里,我们就要用到动态数组。

动态数组类的主体

public class IntArray {/*** 作用是用来存储 真正的数据的*/private int[] array = new int[10];/*** 存储 数组的真实 有效长度*/private int size;/*** 创建一个空的对象*/public IntArray() {}/*** 将数组转成动态数组** @param array*/public IntArray(int[] array) {this.array = array;this.size = array.length;}/*** 获取动态数组的有效长度** @return*/public int size() {return this.size;}
}

对动态数组添加方法

向动态数组的指定位置添加元素

 /*** 向动态数组的指定位置添加元素** @param index* @param ele*/public void add(int index, int ele) {if (index > size || index < 0)throw new IndexOutOfBoundsException("数组超出了IntArray的范围,期待的值是0~" + (size - 1) + ",实际传入的是" + index);// 尝试扩容grow();// 从 index 位置 开始 ,所有后面的元素都要进行移动for (int i = size - 1; i >= index; i--) {array[i + 1] = array[i];}// 在 index位置插入元素array[index] = ele;// 有效长度 +1size++;}

删除指定位置的元素,并返回删除的元素

   /*** 定义一个方法、用来删除指定位置的元素,并返回被删除的元素*/public int remove(int index) {// 检查索引checkIndex(index);// 删除指定位置的元素// 获取 index 位置的元素int ele = get(index);// 从删除元素的位置开始 移动后面所有的元素for (int i = index; i < size - 1; i++) {array[i] = array[i + 1];}// 将 有效长度 -1array[size - 1] = 0;size--;return ele;}

修改动态数组 指定位置的元素

  /*** 修改动态数组 指定位置的元素** @param index* @param ele*/public void set(int index, int ele) {// 检查索引checkIndex(index);// 修改 index 的位置元素为 elearray[index] = ele;}

删除指定的第一个元素,移除失败、返回false

    /*** 删除指定的第一个元素,移除失败、返回false** @param ele* @return*/public boolean removeElement(int ele) {// 获取 ele 元素出现的位置int index = indexOf(ele);if (index == -1) return false;// 删除 index 位置的元素remove(index);return true;}

删除指定个数的元素

count > 0 :  从前删除 count个 ele元素

count = 0 :  删除所有 ele元素

count <0 :  从后删除 count 个 ele 元素

  /*** void  removeElement(int  ele ,  int  count) : 删除指定个数的元素* count > 0 :  从前删除 count个 ele元素* count = 0 :  删除所有 ele元素* count <0 :  从后删除 count 个 ele 元素** @param ele* @param count*/public void removeElement(int ele, int count) {// 如果 count >=0 , 则 删除 指定个数的元素(从前到后)int n = 0;if (count >= 0) {for (int i = 0; i < size; i++) {if (ele == array[i]) {// 删除 第 i 个位置的元素remove(i--);if (++n == count) return;}}} else {for (int i = size - 1; i >= 0; i--) {if (ele == array[i]) {remove(i);if (--n == count) return;}}}}

获取 指定位置的元素

  /*** 根据索引 获取 对应位置的元素** @param index* @return*/public int get(int index) {// 检查索引checkIndex(index);return array[index];}

动态数组的扩容

    /*** 内部使用的扩容*/private void grow() {if (size >= array.length) {// 创建一个新数组int[] newarray = new int[array.length << 1];// 将 原数组中的有效内容拷贝到新数组中System.arraycopy(array, 0, newarray, 0, size);// 将 新数组 赋值给 当前类的 array 属性this.array = newarray;}}

toString方法的重写

  public String toString() {if (array == null)return "null";int iMax = size - 1;if (iMax == -1)return "[]";StringBuilder b = new StringBuilder();b.append('[');for (int i = 0; ; i++) {b.append(array[i]);if (i == iMax)return b.append(']').toString();b.append(", ");}}

加入上述方法,动态数组的基本功能就可以实现。后期大家在使用的时候,还可以添加自己,需要的方法。

Java动态数组的实现相关推荐

  1. Java动态数组的用法详解

    Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayL ...

  2. java 动态数组_Java动态数组的用法详解

    Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayL ...

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

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

  4. java动态数组的实现的_Java实现数据结构之【动态数组】

    数组是学习编程语言时较先接触到的一种数据结构,本章基于Java的静态数组实现动态数组,并进行简单的复杂度分析 数组相信各位都知道,那什么是动态数组呢?我们定义一个数组后,一般长度会直接定义好,如果数组 ...

  5. 使用Java动态数组的实现

    使用Java中的数组 int[] arr=new int[10]; for(int i=0;i<arr.length;i++)arr[i]=i; int[] scores =new int[]{ ...

  6. 自定义实现Java动态数组

    写在前面 通常,我们会用高级程序语言中的数组来描述线性表的顺序存储结构,而这种顺序表的特点时逻辑顺序与物理顺序相同,即数组中元素的内存地址是连续的. 那么很显然,这样的数组(静态数组)在空间被占满后再 ...

  7. Java动态数组和泛式

    1.认识动态数组和泛式 之前我们所使用的数组最大的问题在于其可操作性弱,当我们定义完一个数组并存入相应元素后,很难对其中的元素做出增减操作,且数组的长度也不可变,当我们要存入超出数组长度的元素时,就需 ...

  8. java动态数组的实现_动手编写—动态数组(Java实现)

    目录 数组基础回顾 自定义动态数组 动态数组的设计 抽象父类接口设计 抽象父类设计 动态数组之DynamicArray 补充数组缩容 全局的关系图 声明 数组基础回顾 1.数组是一种常见的数据结构,用 ...

  9. Java动态数组和静态数组详解

    前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客  数组: 概念:数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致,不能出现混合类型 1.什么数据类型就只能储存什么数据元素,比 ...

  10. java 动态数组的应用

    import java.util.*; import java.util.GregorianCalendar; /** * 测试数组列表的功能 * @author Administrator * */ ...

最新文章

  1. 丁磊:噢买尬,买它,华少别抢话
  2. 字节输入流读取字节数据
  3. NAS服务器局域网内IPad、手机、电视盒子等联网播放
  4. 排序算法 - 6种 - 超炫的动画演示 - Python实现
  5. Linux常用的分区方案及目录结构
  6. Seata多微服务互相调用_全局分布式事物使用案例_Account-Module 账户微服务说明---微服务升级_SpringCloud Alibaba工作笔记0064
  7. 2020已过大半,量子计算机发展如何了?
  8. 第六届蓝桥杯试题c/c++B组5
  9. 关于tomcat 开启gc日志后每隔1小时full gc的问题
  10. MATLAB 学习资料整理
  11. python文件处理——JSON格式文件
  12. nginx HTML网页乱码
  13. 从键盘上输入10个数,求其平均值。
  14. 国自然标书,600多份成功申请基金的标书 可下载
  15. 南京IT行业企业比较
  16. CSS 1px边框问题两个解决方案
  17. JVM垃圾回收说为学日益,为道日损
  18. 倒闭潮不断,众筹的生机在何处?
  19. linux sftp ftp 速率,linux上ftp和sftp简要操做命令
  20. ThinkPHP5文档学习——配置

热门文章

  1. Educoder计算机数据表示实验(HUST)第2关:汉字机内码获取实验
  2. “github中文版”来了,这个神器一键帮你汉化
  3. iar arm 6.4 破解
  4. 开源微服务框架 汇总
  5. ESAPI(一)索引的操作以及数据插入
  6. 联想r720安装固态_联想LenovoR720游戏笔记本如何安装固态硬盘
  7. Profibus通讯接口连接不上怎么办
  8. Java对象转Map的解决办法
  9. STM8L051F3串口接收中断超时判断数据结束
  10. 显卡刷bios改型号_显卡BIOS刷新方法(详细)