目录
数组是 Java 一种常见的数据结构,可以分为一维数组、二维数组以及多维数组。
一、一维数组
数组是有序数据的集合,数组中的每个元素有相同的数据类型,可以用一个统一的数组名称和下标来唯一地确定数组中的元素。
1.1 声明和内存分配
使用 Java 数组,经过如下两个步骤:
(1)声明数组。
(2)分配内存给该数组。
创建数组
方式一
数据类型 数据名称[] ; //声明一维数组名称
数据名称 = new 数据类型[数组大小]; // 分配内存给数组
方式二
数据类型[] 数据名称 = new 数据类型[数组大小];
方式三
数据类型[] 数据名称 = {数据1,数据2,.....};
示例
int score[];
score = new int[3];
内存分配如图:
数组是非基本数据类型,因此数组变量指向的是内存分配的一个地址。
1.2 遍历数组
方法一 for 遍历数组
示例:
public class Main {
public static void main(String args[]) {
int a[] = {1,2,3,4,5};
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] +" ");
}
}
}
控制台输出
1 2 3 4 5
方法二 for each遍历数组
public class Main {
public static void main(String args[]) {
int a[] = {1,2,3,4,5};
for (int i : a) {
System.out.print(i+" ");
}
}
}
方法三 用 Arrays 工具类
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
int a[] = {1,2,3,4,5};
System.out.println(Arrays.toString(a));
}
}
1.3 数组操作API相关方法
方法一 排序
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
int a[] = {8,2,9,4,5};
System.out.println("排序前 =" + Arrays.toString(a));
Arrays.sort(a); // 排序
System.out.println("排序后 =" + Arrays.toString(a));
}
}
控制台输出
排序前 =[8, 2, 9, 4, 5]
排序后 =[2, 4, 5, 8, 9]
方法二 排序(冒泡)
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
int a[] = { 8, 2, 9, 4, 5 };
System.out.println("排序前 = " + Arrays.toString(a));
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] > a[j + 1]) {
// 交换
int tem = a[j];
a[j] = a[j + 1];
a[j + 1] = tem;
}
}
}
System.out.println("排序后 = " + Arrays.toString(a));
}
}
控制台输出
排序前 = [8, 2, 9, 4, 5]
排序后 = [2, 4, 5, 8, 9]
拷贝
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
int a1[] = {1,2,3,4,5};
int a2[] = {4,5,6,7,8,9};
System.arraycopy(a1, 0, a2, 0, 3);
System.out.println("a1 = " + Arrays.toString(a1));
System.out.println("a2 =" +Arrays.toString(a2));
}
}
说明:System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src:源数组。
srcPos:源数组拷贝下标位置。
dest:目标数组。
destPos:拷贝到目标数组开始位置。
length:拷贝源数组长度。
控制台输出
a1 = [1, 2, 3, 4, 5]
a2 =[1, 2, 3, 7, 8, 9]
数组查找最大与最小值
public class Main {
public static void main(String args[]) {
int a[] = { 8, 2, 9, 4, 5 };
int max = a[0];
int min = a[0];
for (int i = 0; i < a.length; i++) {
if(a[i] > max){
max = a[i];
}
if(a[i] < min){
min = a[i];
}
}
System.out.println("最大值max="+max+" 最小值min="+min);
}
}
控制台显示
最大值max=9 最小值min=2
二、二维数组
二维数组声明方式和一维数组类似,内存的分配也是一样用 new 关键字。
声明格式
数据类型 数据名[][];
数据名 = new 数据类型[行的个数][列的个数];
示例:
public class Main {
public static void main(String args[]) {
int a[][] = {
{ 2, 3, 6 },
{ 8, 6, 7 }
};
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
}
控制台输出
2 3 6
8 6 7
三、多维数组
要想提高数组的维度,只要在声明数组的时候将索引与中括号再加上一组即可,所以三维数组的声明为 int a[][][],以此类推。