Java数组详解
2021/6/6 14:21:08
本文主要是介绍Java数组详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数组概述
- 数组的定义:数组是相同类型数据的有序集合;数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成;其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。
数组声明创建
-
首先必须声明数组变量,才能在程序中使用数组。例如:
dataType[] arrayRefVar; //首选的方法 或者 dataType arrayRefVar[]; //效果相同,但是不是首选方法
-
Java语言使用new关键字操作符来创建数组。例如:
dataType[] arrayRefVar = new dataType[arraySize];
- 数组的元素是通过索引访问的,数组索引从0开始。
- 获取数组的长度。例如:
arrays.length //获取数组长度
代码:
public class ArrayDemo01 { public static void main(String[] args) { //数组类型 //1.声明一个数组 int[] nums; //2.创建一个数组 nums=new int[10]; //传值 nums[0]=1; nums[1]=2; nums[2]=5; nums[3]=1; nums[4]=2; nums[5]=4; nums[6]=6; nums[7]=8; nums[8]=7; nums[9]=9; //求和运算 int sum=0; for (int i = 0; i <nums.length ; i++) { sum=sum+nums[i]; } System.out.println(sum); } }
Java内存分析如图所示:
数组初始化方式:
public class ArrayDemo02 { public static void main(String[] args) { //静态数组初始化 int[] num={1,2,3,4,5}; System.out.println(num[0]); System.out.println("=========================="); //动态数组初始化 包含默认初始化值 int[] a=new int[10]; a[9]=90; System.out.println(a[9]); System.out.println(a[0]);//默认初始化值 } }
数组特点
- 长度是一定的,数组一旦被创建,它的大小就是不可改变的。
- 数组元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。
数组边界
-
下标的合法区间为[0,length-1],如果越界就会报错:例如
public class ArrayDemo03 { public static void main(String[] args) { int[] a=new int[5]; System.out.println(a[5]);//超出边界 } }
报错:
数组使用
- 普通的for循环:代码如下
//普通数组for循环 public class ArrayDemo03 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //打印全部数组元素 for (int i = 0; i <arrays.length ; i++) { System.out.print(arrays[i]+" "); } System.out.println(); System.out.println("*********************************"); //计算数组元素之和 int sum=0; for (int i = 0; i <arrays.length ; i++) { sum+=arrays[i]; } System.out.println("sum="+sum); System.out.println("*********************************"); //查找数组最大元素 int max=arrays[0]; for (int i = 1; i <arrays.length ; i++) { if (arrays[i]>max){ max=arrays[i]; } } System.out.println("max="+max); } }
- For-Each循环:代码如下
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //增强型的for循环,只能用于打印输出语句 JDK1.5以上版本才有,没有下标 for (int array : arrays) { System.out.print(array+" "); } } }
- 数组作方法入参:代码如下
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; printArray(arrays); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } }
- 数组作返回值:代码如下
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; int[] reverseArray = reverseArray(arrays); printArray(reverseArray); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } //反转数组 public static int[] reverseArray(int[] arrays){ int[] result=new int[arrays.length];//定义一个新数组,用于存放数组 //反转操作 for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) { result [j]=arrays[i];//把arrays数组的第一个元素放在result数组的最后一位上 } return result; } }
多维数组
定义:多维数组可以看成是数组的数组,例如二维数组就是一个特殊的一维数组,每一个元素都是一个一维数组。例如:
int a[][]=new int[2][5];//表示二维数组a可以看成是一个两行五列的数组
代码如下:
//多维数组 public class ArrayDemo05 { public static void main(String[] args) { //定义一个四行两列的二维数组 int[][] array={{1,2},{3,4},{5,6},{7,8}}; printArray(array[0]);// 输出 1 2 } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } }
Arrays类
概念:
- 数组的工具类是java.util.Arrays
- 查看jdk帮助文档
- Arrays类中的方法都是static修饰的静态方法,在使用时可以直接使用类名进行调用,而“不用”使用对象来调用。
功能:
- 给数组赋值:通过fill方法。
- 对数组排序:通过sort放大,按升序。
- 比较数组:通过equals方法比较数组中元素值是否相等。
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { int[] array={1,45,14,2547,1245,6524,123,251,258}; System.out.println(array);//输出的是对象 [I@154617c System.out.println("***********************************"); //打印数组 调用方法 System.out.println(Arrays.toString(array)); System.out.println("************************************"); //调用printArray方法 printArray(array); System.out.println(); System.out.println("****************************************"); //排序 升序 Arrays.sort(array); System.out.println(Arrays.toString(array)); System.out.println("****************************************"); Arrays.fill(array,2,4,0);//表示数组下标为 2 到 4 之间的数据包括下标为 2 但是不包括下标为 4 的数据变成0 System.out.println(Arrays.toString(array)); } public static void printArray(int[] array){ for (int i = 0; i <array.length ; i++) { if (i==0){ System.out.print("["); } if (i==array.length-1){ System.out.print(array[i]+"]"); }else { System.out.print(array[i]+", "); } } } }
稀疏数组----->一种数据结构
//稀疏数组 五子棋 public class ArrayDemo08 { public static void main(String[] args) { //定义一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋 int[][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //输出原数组元素 System.out.println("输出原始的数组:"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+" "); } System.out.println(); } //转换为稀疏数组来保存 //1.获取有效值的个数 int count1=0; for (int i = 0; i <11 ; i++) { for (int j = 0; j <11 ; j++) { if (array1[i][j]!=0){ count1++; } } } System.out.println("有效值的个数:"+count1); System.out.println("=========================================="); //2.创建一个稀疏数组的数组 int[][] array2=new int[count1+1][3]; array2[0][0]=11; array2[0][1]=11; array2[0][2]=count1; //遍历二维数组,把非0的值存放到稀疏数组中 int count2=0;//计数 for (int i = 0; i <array1.length ; i++) { for (int j = 0; j <array1[i].length ; j++) { if (array1[i][j]!=0){ count2++; array2[count2][0]=i;//表示行 array2[count2][1]=j;//表示列 array2[count2][2]=array1[i][j];//表示值 } } } //输出稀疏数组 System.out.println("输出稀疏数组:"); for (int i = 0; i <array2.length ; i++) { System.out.println(array2[i][0]+" "+array2[i][1]+" "+array2[i][2]+" "); /* 输出稀疏数组: 11 11 2 ----->表示输出的是11行11列的数组,有两个有效值 1 2 1 ----->表示第一个有效值在下标为1,2的地方上,而且值是1 2 3 2 ----->表示第二个有效值在下标为2,3的地方上,而且值是2 */ } } }
这篇关于Java数组详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南