本文最后更新于:2020年6月18日 下午
数组的定义
数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。
在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:
- 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性:数组中的元素是有序的,通过下标访问。
- 不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变。
总的来说,数组具有以下特点:
- 数组可以是一维数组、二维数组或多维数组。
- 数值数组元素的默认值为 0,而引用元素的默认值为 null。
- 数组的索引从 0 开始,如果数组有 n 个元素,那么数组的索引是从 0 到(n-1)。
- 数组元素可以是任何类型,包括数组类型。
- 数组类型是从抽象基类 Array 派生的引用类型。
在 Java 中数组的下标是从零开始的,很多计算机语言的数组下标也从零开始。Java 数组下标访问运算符是中括号,如 intArray[0],表示访问 intArray 数组的第一个元素,0 是第一个元素的下标。Java 中的数组本身是引用数据类型,它的长度属性是 length。
数组的初始化
Java 一维数组有两种初始化方法
静态初始化
int array[] = new int[]{1,2,3,4,5}
//或者
int array[] = {1,2,3,4,5}
需要注意的是,写成如下形式是错误的
int array[] = new int[5]{1,2,3,4,5}
动态初始化
int array[] = new int[5];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
静态与动态初始化的区别就在于,前者是声明的时候就初始化,后者是先声明,再动态初始化。
数组元素访问
数组元素访问
数组变量访问方式
格式: 数组名
数组内部保存的数据的访问方式
格式:数组名[索引]
索引是数组中数据的编号方式
作用:索引用于访问数组中的数据使用,数组名索引]等同于效名,是一种特殊的变量铭
特征①:索引从0开始
特征②:索引是连续的
特征③:索引逐一增加,每次加1
package ArrayDemo;
/*
数组:是一种用于存储多个相同类型数据的存储模型
定义格式: (推荐方式)
数据类型[]数组名;
举例: int[] arr;
数组初始化:
A:所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
B:数组初始化
动态初始化
静态初始化
动态初始化:
初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型[]变量名= new 数据类型[数组长度];
范例: int[] arr = new int[3];
*/
public class array01 {
public static void main(String[] args) {
int[]arr = new int[3];
/*
左边:
int :说明数组中的元素类型是int类型
[]:说明这是一个数组
arr:这是数组的名称
右边:
new:为数组申请内存空间
int:说明数组中的元素类型是int类型
[]:说明这是一一个数组
3:数组长度,其实就是数组中的元素个数
*/
//输出数组名
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
内存分配
java中的内存分配
栈内存:存储局部变量
定义在方法中的变量,使用完毕,立即消失
堆内存:存储new出来的内容(实体,对象)
数组在初始化时,会为存储空间添加默认值
整数: 0
浮点数: 0.0
布尔: false
字符:空字符
引用数据类型: null
每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收。
数组内存图(单个数组)
public class Demo04 {
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr); // [I@50cbc42f
arr[1] = 2;
System.out.println(arr[1]);
}
}
以上方法执行,输出的结果是[I@5f150435,这个是什么?
是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。 输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素。
数组内存图(多个数组)
public static void main(String[] args) {
int[] arr1 = new int[2];
int[] arr2 = new int[3];
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
// 给arr1数组的索引为0元素赋值100
arr1[0] = 100;
// 给arr2数组的索引为0元素赋值200
arr2[0] = 200;
System.out.println("‐‐‐‐‐‐‐‐‐‐‐");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
数组初始化之静态初始化
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[]变量名= new数据类型[]{数据1,数据2,数据3,…..
范例:int[] arr=new int[]{1,2,3};
简化格式:数据类型[]变量名={数据1,数据2,数据3,·····}
范例: int[] arr={1,2,3};
package ArrayDemo;
public class array02 {
public static void main(String[] args) {
//定义数组
int[] arr = {1, 2, 3};
//输出数组名
System.out.println(arr);
//输出数组中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
输出:
[I@1b6d3586
1
2
3
数组操作的两个常见小问题
索引越界:访问了数组中不存在的索|对应的元素,造成索引越界问题
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常
null:空值,引用数据类型的默认值,表示不指向任何有效对象
package ArrayDemo;
/*
索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
ArrayIndexOutOfBoundsException
空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常
NullPointerException
null:空值,引用数据类型的默认值,表示不指向任何有效对象
*/
public class array03 {
public static void main(String[] args) {
int[] arr = new int[3] ;
//索引越界
//System.out.println(arr[3]);
//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
//空指针异常
//把null赋值给数组
arr = null;
System.out.println(arr[0]);
//Exception in thread "main" java.lang.NullPointerException
}
}
数组常见操作
遍历
获取数组元素数量
格式:数组名length
范例: arr.length
遍历通用格式:
int[] arr = {.....}
for(int x=0; x<arr.length;x++){
arr[x] //对arr[x]进行操作
}
案例:
package ArrayDemo;
/*
遍历
获取数组中的每一个元素输出在控制台
获取数组元素
数组名. length
*/
public class array04 {
public static void main(String[] args) {
//定义数组
int[] arr = {1,23,4545,678768,32423,23445};
//使用通用的遍历格式
for(int x=0; x<arr.length; x++){
System.out.println(arr[x]);
}
}
}
获取最值
int[] arr = {12,45,98,73,60};
思路:
1:定义-个变量,用于保存最大值(或最小值)
int max;
2:取数组中第一个数据作为变 量的初始值
int max = arr[0];
3:与数组中剩余的数据逐个比对,每次比对将最大值保存到(max)变量中
for(int x=1; x<arr .length;X++) {
}
4:循环结束后打印变量的值
System.out . println("max: "+max);
案例:
package ArrayDemo;
/*
获取最值
获取数组中的最大值
最小值同道理
*/
public class array05 {
public static void main(String[] args) {
//定义数组
int[]arr = {12,23,453,678,4324};
//定义一个变量,用于保存最大值
//取数组中第一一个数据作为变量的初始值
int max = arr[0];
//与数组 中剩余的数据逐个比对,每次比对将最大值保存到变量中
for(int x=1;x<arr.length;x++){
if(arr[x]>max){
max =arr[x];
}
}
//循环结束后打印变量的值
System.out.println("max:"+ max);
}
}
输出:
max:4324
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!