java数组的概念和应用-一维数组详细解析
用于存储相同数据类型的内容,在内存中申请连续的存储单元
一维数组
一维数组的基本概念
-
当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数 组即可,一维数组本质上就是在内存空间中申请一段连续的存储单元。
-
数组是相同数据类型的多个元素的容器,元素按线性顺序排列,在Java语 言中体现为一种引用数据类型。
-
数组和变量图示区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xvqn69WL-1625381523627)(C:\Users\Administrator\Desktop\拉钩教育Java笔记\images\数组及应用\01一维数组的基本概念.png)]
一维数组的声明方式
-
语法结构
数据类型[] 数组名称 = new 数据类型[数组的长度];(动态方式)
数据类型 数组名称[] = new 数据类型[数组的长度];(不推荐)
注意事项
以上两种方式从结果上来说是一样的,第二种声明方式和变量的声明区分,进而提高代码的可读性
数组的长度可以是一个整形变量 如果是变量时 变量的值 > 0 ;
-
数组的访问
可以通过下标的方式访问数组中的每一个元素。
-
注意事项
- 数组的 下标从0开始,对于长度为n的数组,下标的范围是0~n-1
- 在数组遍历超过下标的范围时,会出错–》java.lang.ArrayIndexOutOfBoundsException 意思是 数组下标越界异常
-
一维数组的内存结构图
-
代码演示
/* 编程使用一维数组 */ public class ArrayTest{ public static void main(String[] args){ // 1.声明一个长度为5 数据类型为int 的一维数组 // int arr[] = new int[5]; 这两种方式的从结果上说是一样 不推荐使用 int[] arr = new int[5]; // 2.打印一维数组的长度以及每一个元素的值 System.out.println("数组的长度是:" + arr.length); for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } } }
一维数组的初始化方式
-
基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:
数据类型 默认值 byte、 short、char、int、long 0 float、double 0.0 boolean false String(引用数据类型) null -
数组声明的同时进行初始化(静态方式)
语法结构
数据类型[] 数组名称 = {初始值1, 初始值2, ...};简化写法 数据类型[] 数组名称 = new 数据类型[] {初始值1, 初始值2, ...}; 原始写法
-
代码演示
/* 编程使用静态方式的一维数组 */ public class ArrayInitStaticTest{ public static void main(String[] args){ // 1.声明数组的通知并对数组中的元素初始化 静态方式 int[] arr = {1, 2, 3, 4, 5,}; // System.out.println("数组的长度是:" + arr.length); for(int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } } }
一维数组的增删改查
-
一维数组的增删改查的声明和赋值
图示表示 -
一维数组的增删改查的插入
图示表示
-
一维数组的增删改查的删除
图示表示 -
一维数组的增删改查的改查
图示表示 -
代码演示
/* 编程实现一维数组的增删改查操作 */ public class ArrayOpTest { public static void main(String[] args) { // 1.声明一个长度为5元素类型为int类型的一维数组 int[] arr = new int[5]; // 打印数组中所有元素的数值 System.out.print("数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 全是默认值0 } System.out.println(); System.out.println("-------------------------------------------------"); // 2.将数据11 22 33 44依次对数组中前四个元素赋值 /* arr[0] = 11; arr[1] = 22; arr[2] = 33; arr[3] = 44; */ for(int i = 0; i < arr.length-1; i++) { arr[i] = (i+1)*11; } // 打印数组中所有元素的数值 System.out.print("数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 11 22 33 44 0 } System.out.println(); System.out.println("-------------------------------------------------"); // 3.将数据55插入到下标为0的位置,原有元素向后移动 for(int i = arr.length-1; i > 0; i--) { arr[i] = arr[i-1]; } arr[0] = 55; // 打印数组中所有元素的数值 System.out.print("数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 55 11 22 33 44 } System.out.println(); System.out.println("-------------------------------------------------"); // 4.将数据55从数组中删除,删除方式为后续元素向前移动,最后一个位置置为0 /* arr[0] = arr[1]; arr[1] = arr[2]; arr[2] = arr[3]; arr[3] = arr[4]; */ for(int i = 0; i < arr.length-1; i++) { arr[i] = arr[i+1]; } arr[4] = 0; // 打印数组中所有元素的数值 System.out.print("数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 11 22 33 44 0 } System.out.println(); System.out.println("-------------------------------------------------"); // 5.查找数组中是否有元素22,若有则修改为220 for(int i = 0; i < arr.length; i++) { if(22 == arr[i]) { arr[i] = 220; } } // 打印数组中所有元素的数值 System.out.print("数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 11 220 33 44 0 } System.out.println(); } }
一维数组的优缺点
- 可以直接通过下标(或索引)的方式访问指定位置的元素,速度很快
- 数组要求所有元素的类型相同
- 数组要求内存空间连续,并且长度一旦确定就不能修改
- 增加和删除元素时可能移动大量元素,效率低
一维数组之间的元素拷贝
-
代码演示
/* 编程实现数组之间的拷贝 */ public class ArrayCopyTest{ public static void main(String[] args){ // 1.声明一个初始值为 11 22 33 44 55 的数值 int[] arr = {11, 22, 33, 44, 55}; // 2.打印数组中的所有元素 System.out.println("第一组数组中的元素有:"); for(int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(); System.out.println("--------------------------"); // 3.声明一个长度为3 的整型一维数组 int[] arrs = new int[3]; // 4.打印数组中的所有元素 System.out.println("第二组数组中的元素有:"); for(int i = 0; i < arrs.length; i++){ System.out.print(arrs[i] + " "); } System.out.println(); System.out.println("--------------------------"); // 5.将第一个数组中的中间3个元素赋值到第二个元素中 // 使用java 给定的数组拷贝功能 System.arraycopy(arr, 1, arrs, 0, 3); // 将数组arr中下标1开始的三个元素 拷贝到arrs中下标为0 System.out.println("第二组数组中的元素有:"); for(int i = 0; i < arrs.length; i++){ System.out.print(arrs[i] + " "); } }
-
拷贝原理图示