数组概念
是一块连续固定大小的内存空间,数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
特点
:
1、数组的长度大小是固定的
2、同一个数组中,存储的元素数据类型是一样的
3、具有索引下标的概念,将来可以通过索引获取元素
4、数组查询快,增删慢
数组的定义格式
格式1:数据类型[] 数组名;
举例:int[] arr; // 定义了一个可以存储int类型的一维数组,数组名叫做arr
格式2:数据类型 数组名[];
注意
:这两种定义做完了,数组中是没有元素值的。
数组没有初始化,无法直接使用,数组是我们第一个接触到的引用数据类型
思考:如何对数组的元素进行初始化呢?
动态初始化
:先规定数组的大小,数组中的元素先系统赋默认值,后续再自己赋值
语句定义格式:
数据类型[] 数组名 = new 数据类型[数组的大小];
举例:int[] arr = new int[3];
左边
:
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
arr: 数组名,符合标识符的命名规则,相当于变量名
右边
:
new: 在堆内存中开辟空间,将来看到new,就意味着在堆内存中开辟空间
int: 表示存储元素的数据类型
[]: 表示这是一个一维数组
3: 表示该数组最多可以存储3个元素,数组长度为3
白话文解释
:创建了一个可以存储3个int类型元素大小的数组,数组名叫做arr
专业术语解释
:在堆内存中开辟一个连续空间大小为3的数组对象,将地址值赋值给栈内存中arr变量
public class ArrayDemo2 {
public static void main(String[] args) {
//创建一个数组
int[] arr = new int[3];
System.out.println(arr); // 地址值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("--------------------------");
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
静态初始化
:自己将数据赋值,大小由系统根据我们赋值的数量来决定
语句定义格式
:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,....};
举例:int[] arr1 = new int[]{11,22,33,44,55,66};
简化格式
:
数据类型[] 数组名 = {元素1,元素2,元素3,....};
举例: int[] arr1 = {11,22,33,44,55,66};
public class ArrayDemo4 {
public static void main(String[] args) {
//简化静态初始化
int[] arr1 = {11,22,33,44,55,66};
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println(arr1[3]);
System.out.println(arr1[4]);
System.out.println(arr1[5]);
}
}
数组操作常见的两个小问题
数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生。
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时。
数组获取长度的属性length
语句定义格式 数组名.length 获取的是该数组的长度(元素的个数)
数组的索引最大值 = 数组名.length-1
/*Convert to Basic Latin*/
public class ArrayTest2 {
public static void main(String[] args) {
int[] arr = {123, 451, 45, 12, 556, 12, 412};
//1、默认将第一个元素作为最大值以及最小值
int maxNumber = arr[0];
int minNumber = arr[0];
//2、从第二个元素开始循环依次比较
for (int i = 1; i < arr.length; i++) {
if (arr[i] > maxNumber) {
maxNumber = arr[i];
} else if (arr[i] < minNumber) {
minNumber = arr[i];
}
}
System.out.println("数组最大值为:" + maxNumber);
System.out.println("数组最小值为:" + minNumber);
}
}
/*数组元素逆序 (就是把元素对调)*/
public class ArrayTest3 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
System.out.println("逆序前:");
printIntArray(arr);
//实现逆序的方式1:
int[] resArr1 = niXu1(arr);
System.out.println("逆序后:");
printIntArray(resArr1);
//实现逆序的方式2:
int[] resArr2 = niXu2(arr);
System.out.println("逆序后:");
printIntArray(resArr2);
}
/*
将逆序1的功能封装成一个方法
小结论:交换的次数 = 数组的长度 / 2
*/
public static int[] niXu1(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
return arr;
}
public static void printIntArray(int[] array) {
for (int i = 0; i < array.length; i++) {
if (i == 0) {
System.out.print("[" + array[i] + ", ");
} else if (i == array.length - 1) {
System.out.print(array[i] + "]");
} else {
System.out.print(array[i] + ", ");
}
}
//换行
System.out.println();
}
}
二维数组概述
二维数组其实就是一个元素为一维数组的数组。
格式1
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组
n表示每一个一维数组的元素个数
举例
:
int[][] arr = new int[3][2];
定义了一个二维数组arr
这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素
格式2
数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组
这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例
:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1];
格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例
:
int[][] arr = {{1,2,3},{4,6},{6}};
二维数组遍历
public class Array2Test1 {
public static void main(String[] args) {
//创建一个二维数组
int[][] arr = {{11, 22, 33, 44}, {1, 2, 3}, {100, 200, 300, 400, 500}};
for (int i = 0; i < arr.length; i++) { // 外层循环控制的是遍历第几个一维数组元素
for (int j = 0; j < arr[i].length; j++) { // 内层循环控制的是每一个一维数组中元素的遍历
if (j == 0) {
System.out.print("[" + arr[i][j] + ", ");
} else if (j == arr[i].length - 1) {
System.out.print(arr[i][j] + "]");
} else {
System.out.print(arr[i][j] + ", ");
}
}
//换行
System.out.println();
}
}
}
标签:arr,int,System,数组,println,out
From: https://www.cnblogs.com/zhuzhuya/p/18377070