数组:
- 是一种数据类型(引用类型)
- 相同数据类型元素的集合
- 定义:
- 初始化:给数组中的元素做初始化
- 访问:访问的是数组中的元素
- 通过(数组名.length)可以获取数组的长度(元素的个数)
- 通过下标/索引来访问数组中的元素
下标从0开始,最大到(数组的长度-1)
- 遍历/迭代:从头到尾挨个走一遍
数组的定义
数组是一种数据结构,用于存储相同类型的多个元素。它可以存储基本数据类型(如int、float、boolean等)和引用数据类型(如对象)。
数组的定义包括以下几个部分:
- 数据类型:数组可以存储相同类型的元素,其中元素的数据类型可以是基本数据类型或引用数据类型。
- 数组名:数组的名称用于标识该数组,在使用数组时需要通过数组名来引用数组。
- 数组的大小:数组的大小指定了数组可以存储的元素个数,它是一个非负整数。
以下是定义数组的几种方式:
- 静态初始化:通过在定义数组时直接为数组元素赋值来初始化数组。语法如下:
例如:数据类型[] 数组名 = {元素1, 元素2, ...};
int[] numbers = {1, 2, 3, 4, 5};
- 动态初始化:在定义数组时只指定数组的类型和大小,然后在后续的代码中为数组元素赋值。语法如下:
例如:数据类型[] 数组名 = new 数据类型[数组大小];
int[] numbers = new int[5]; numbers[0] = 1; numbers[1] = 2; numbers[2] = 3; numbers[3] = 4; numbers[4] = 5;
无论是静态初始化还是动态初始化,数组的元素可以通过索引访问和修改,索引从0开始,直到数组的大小减1。例如,通过numbers[0]
可以访问数组numbers
的第一个元素。
复制
- System.arraycopy(a,1,b,0,4);
//数组的复制:int[] a = {10,20,30,40,50};int[] b = new int[6]; //0,0,0,0,0,0//a:源数组//1:源数组的起始下标//b:目标数组//0:目标数组的起始下标//4:要复制的元素个数System.arraycopy(a,1,b,0,4); //灵活性好for(int i=0;i<b.length;i++){System.out.println(b[i]);}// - int[ ] b = Arrays.copyOf(a,6);//常规复制int[] a = {10,20,30,40,50};//a:源数组//b:目标数组//6:目标数组的长度(元素个数)//---若目标数组长度>源数组长度,则末尾补默认值//---若目标数组长度<源数组长度,则将末尾的截掉int[] b = Arrays.copyOf(a,6); //灵活性差for(int i=0;i<b.length;i++){System.out.println(b[i]);}
数组的扩容
int[] a = {10,20,30,40,50};
//数组扩容(创建了一个更大的新的数组,并将源数组数据复制进去了)a = Arrays.copyOf(a,a.length+1);for(int i=0;i<a.length;i++){System.out.println(a[i]);}
- 综合案例:
//求数组元素的最大值,并将最大值放在数组最后一个元素的下一个位置public class MaxOfArray {public static void main(String[] args) {int[] arr = new int[10];for(int i=0;i<arr.length;i++){arr[i] = (int)(Math.random()*100);System.out.println(arr[i]);}int max = arr[0]; //假设第1个元素为最大值for(int i=1;i<arr.length;i++){ //遍历剩余元素if(arr[i]>max){ //若剩余元素大于maxmax = arr[i]; //则修改max为较大的}}System.out.println("最大值为:"+max);arr = Arrays.copyOf(arr,arr.length+1); //扩容arr[arr.length-1] = max; //将最大值max赋值给arr中的最后一个元素for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}}
排序:
- Arrays.sort(arr); //升序排列(从小到大)
//8)数组的排序:int[] arr = new int[10];for(int i=0;i<arr.length;i++){arr[i] = (int)(Math.random()*100);System.out.println(arr[i]);}Arrays.sort(arr); //对arr进行升序排列System.out.println("数组排序后的数据:");for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}System.out.println("倒序输出:");for(int i=arr.length-1;i>=0;i--){System.out.println(arr[i]);}
总结:
数组是一种用来存储相同类型元素的集合,它是一种引用类型。数组在内存中是连续分配的,可以通过索引值访问数组中的元素。
- 声明和初始化数组 可以通过以下方式声明和初始化数组:
int[] array1; // 声明一个整型数组
array1 = new int[5]; // 初始化数组,指定长度为5int[] array2 = {1, 2, 3, 4, 5}; // 声明并初始化数组,指定具体值int[] array3 = new int[]{6, 7, 8, 9, 10}; // 声明并初始化数组,指定具体值,可以省略数组长度
- 访问数组元素 可以使用索引值访问数组中的元素,索引值从0开始,到数组长度减1结束:
int firstElement = array2[0]; // 访问第一个元素,值为1
int lastElement = array3[array3.length - 1]; // 访问最后一个元素,值为10
- 数组长度 使用
length
属性获取数组的长度:
int length = array1.length; // 数组长度为5
- 遍历数组 可以使用循环结构遍历数组中的所有元素:
for (int i = 0; i < array2.length; i++) {System.out.println(array2[i]);
}for (int element : array3) {System.out.println(element);
}
- 多维数组 Java中也支持多维数组,可以理解为数组的数组:
int[][] twoDimensionalArray = {{1, 2, 3}, {4, 5, 6}}; // 声明并初始化二维数组
int element = twoDimensionalArray[0][1]; // 访问二维数组中的元素,值为2
- 数组拷贝 Java提供了
System.arraycopy()
方法和Arrays.copyOf()
方法,用于对数组进行拷贝:
int[] sourceArray = {1, 2, 3, 4, 5};
int[] targetArray1 = new int[5];
System.arraycopy(sourceArray, 0, targetArray1, 0, sourceArray.length);int[] targetArray2 = Arrays.copyOf(sourceArray, 5);