目录

一、线性表

​二、动态数组

三、动态数组的四大操作

3.1、增

3.2、查:

3.3、改

3.4、删


一、线性表

理解:所谓的线性表,就是多个相同数据类型元素逻辑上呈直线排列,逻辑上连续。我们把这种结构称为线性表。

常见的线性表有:数组(顺序表),链表,栈,队列,字符串..

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。(物理上连续,一个元素挨着另一个元素,中间没有空隙)

二、动态数组

理解:就是在普通数组上,增加了一个可以根据元素的个数动态调整数组大小的功能。

为什么需要动态数组?

1,我们之前用的数组最大的问题就在于数组长度定长,一旦一个数组在定义时确定长度之后,使用过程中无法修改这个长度。
2,Java中提供的数组都是静态数组int[] char[] long[](定义之后没法改变长度)
所以需要我们自己定义一个类,拓展基础数组的功能。

例子

public class MyArray {int [] data ;//存放元素仍然还是int[]private int size;//表示当前动态数组中已经存储的元素个数}

对于程序的设计者来说,不可能真正创建个新的数组,使用的还是Java提供的整型数组,若当前data数组已经满了,我们就给他"扩容”Arrays.copyOf(oldArr,newArrLen);=>就可以把旧数组的所有内容搬移到新数组中,新数组的长度为规定长度。

其中size和data.length的区别

size属性表示的是当前数组中有效元素的个数

data.length 表示的是整形数组长度为,此时没有存放元素

当size = data.length表示当前数组已满

三、动态数组的四大操作

3.1、增

1.1数组的增加和扩容


public class MyArray {//存放元素仍然还是int[]//data数组的长度自定义private int [] data ;//表示当前动态数组中已经存储的元素个数private int size;public MyArray(){//默认开辟10个大小的整形数组长度}public MyArray(int initCap){//传入一个整型变量this.data = new int[initCap];}/*** 在当前数组中添加一个新元素val* @param val*/public void add(int val){data[size] = val;size ++;//元素在添加的过程中有可能把当前数组占满了//当size=data.length数组已满if(size == data.length){grow();}}/*** 外部使用者对MyArray中有int[]数组,以及数组的扩容对外部是不可见的* 执行扩容方法*/private void grow(){//copyof方法返回扩容后的新数组this.data = Arrays.copyOf(data,data.length * 2);}
}

2、add(int index,int val): 在数组的index位置插入一个新元素val,新元素插入后的索引为index

add(1,6)=>在索引为1的位置插入新元素6

需要把这个位置之后的所有元素向后移动一个单位,空出index索引位置的元索

注意

先从最后一个有效元素开始向后搬移

然后再插入6

代码

//从当前最后一个有效元素开始向后移动元素,空出index的位置for (int i = size - 1; i >= index ; i--) {data[i + 1] = data[i];}data[index] = val;size ++;//判断数组是否满了if (size == data.length){grow();}}

3.2、查:

1.1 public int getByValue(int val):查询当前动态数组中第一个值为val的元素索引

1.2public int get(int index):查询当前动态数组中索引为index的元素值

1.3 public boolean contains(int val):查询当前动态数组中是否包含值为val的元素,若存在返回true,否则返回false

代码

 public int get(int index) {// 1.判断index的合法性// size对应有效元素的下一个位置if (index < 0 || index >= size) {System.err.println("get index illegal!");return -1;}return data[index];}
 public boolean contains(int val) {int index = getByValue(val);return index != -1;}
 public int getByValue(int val) {// 遍历当前的动态数组for (int i = 0; i < size; i++) {if (data[i] == val) {return i;}}// 还没找到val,不存在return -1;}

3.3、改

1.1 public int set(int index,int newVal):修改index位置的元素为新的值newVal,返回修改前的值
1.2 public boolean set(int oldValint newVal):修改第一个值为oldVal的元素,更改为新的值newVal,返回是否修改成功

代码1.1

public int set(int index,int newVal) {if (index < 0 || index >= size) {System.err.println("set index illegal!");return -1;}int oldVal = data[index];data[index] = newVal;return oldVal;}

1.2

 public boolean setValue(int oldVal,int newVal) {int index = getByValue(oldVal);if (index != -1) {data[index] = newVal;return true;}System.err.println("old value is not exist!");return false;}

3.4、删

1.1 public int remove(int index):删除索引为index对应的元素,返回删除前的元素值

1.2 public int removeFirst():删除数组的头元素
1.3 public int removeLast():删除数组的尾元素
1.4 public boolean removeByValueOnce(int val):删除第一个值为val的元素,返回是否删除成功

1.1

 public int removeIndex(int index) {if (index < 0 || index >= size) {System.err.println("remove index illegal!");return -1;}// 元素搬移,从index开始,后一个元素覆盖前一个元素,一直走到size - 1(最后一个有效元素)// data[i] = data[i + 1]// 最后一个元素向前搬移 i + 1 == size - 1 => i < size - 1int oldVal = data[index];for (int i = index; i < size - 1; i++) {data[i] = data[i + 1];}size --;return oldVal;}

1.2

public int removeFirst() {return removeIndex(0);}

1.3

public int removeLast() {return removeIndex(size - 1);}

1.4

public boolean removeByValueOnce(int val) {for (int i = 0; i < size; i++) {if (data[i] == val) {// 此时i就是第一个值为val的元素removeIndex(i);return true;}}return false;}

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动态数组

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

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

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

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

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

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

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

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

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

  8. Java动态数组和泛式

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

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

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

  10. java 动态数组的应用

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

最新文章

  1. C指针3:指针变量的运算
  2. redmine3.3.1安装与常用插件安装
  3. WPF Multi-Touch 开发:惯性效果(Inertia)
  4. 如何通过SpringMVC框架响应JSON数据
  5. 树莓派3 64linux,树莓派3 model b安装64位debian+qt5.9
  6. 数学建模——主成分分析算法详解Python代码
  7. mysql的安装备份恢复_安装使用Percona XtraBackup来备份恢复MySQL的教程
  8. CNKI学术趋势与万方数据的知识脉络
  9. 北京大学数学科学学院2006/9/20声明:坚持真理、追求卓越zz
  10. python临时笔记
  11. Leetcode120.三角形的最小路径和 -- DP算法
  12. Oracle监听注册和sqlnet,Oracle监听配置(四)--如何实现静态、动态注册
  13. 开启“互联网+”模式打造智能移动APP巡检系统
  14. arcgis图例背景白色,留出空间
  15. A股市股票行情实时数据最简封装API接口的python实现
  16. 作为一名基层管理者如何利用情商管理自己和团队(二)
  17. VB.NET 通过vbs发送微信消息
  18. 电信近期有充值送红包的活动
  19. hosts文件恢复如初方法
  20. 算法入门经典例题3-2,例题3-3知识点

热门文章

  1. 网易云信浏览器WebRTC视频聊天集成
  2. matlab画散点图
  3. 四川信息职业技术学院计算机多媒体技术,成都市计算机多媒体技术最好学校在哪...
  4. Halcon 入门教程(01)
  5. Java 面试学习指南
  6. Java 基础高频面试题(2022年最新版)
  7. Linux下pgadmin4启动报错,在CentOS 7/Fedora 29系统上安装配置pgAdmin 4的方法
  8. 嵌入式Linux开发的编程语言选择
  9. 嵌入式Linux开发工具(vim的使用)
  10. vs2013 MFC入门