Java基础学习(五):数组
目录
- Java基础学习(五):数组
- 概念
- 声明与创建
- 初始化
- 基本特点
- 内存分析
- 应用
- 多维数组
- 扩展内容
- Arrays 类
- 冒泡排序
- 稀疏数组
本文为个人学习记录,内容学习自 狂神说Java
概念
- 数组是相同类型数据的有序集合
- 每个数据称为一个数组元素,可以通过下标来访问
声明与创建
-
数组的两种基本声明方法:
数据类型[] 数组名; // 推荐使用 数据类型 数组名[];
-
数组的两种基本创建方法:
数组名 = {数组内容}; // 创建时直接初始化 数组名 = new 数据类型[数组长度]; // 创建时仅指定大小,元素被初始化为默认值,默认值规则和前面实例变量、类变量的规则一致
-
当然也可以一步完成数组的声明和创建:
数据类型[] 数组名 = {数组内容}; 数据类型[] 数组名 = new 数据类型[数组长度];
-
数组的元素通过索引(下标)来访问,索引从 0 开始
-
获取数组长度
数组名.length
初始化
-
静态初始化
int[] a = {1, 2};
-
动态初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
基本特点
- 数组一旦被创建,它的大小就是不可改变的
- 数组中的元素必须是相同类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看成对象,数组中每个元素相当于该对象的成员变量
内存分析
举个创建数组的栗子:
- 当声明数组时,会在栈中为引用类型的变量 array 分配空间,用于存储数组的地址;
- 当创建数组时,会根据给定的数组大小在堆中分配空间,而地址由声明时栈中的变量 array 指出;
- 当对数组赋值时,将数值保存在堆中。
应用
-
使用 增强for循环 遍历数组元素
int[] array = {1, 2, 3, 4, 5}; for (int i : array) {System.out.println(i); // 打印数组中每一个元素 }
-
数组作为实参和形参
public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};printArray(array); } public static void printArray(int[] array){for (int i : array){System.out.println(i);} }
-
数组作为返回值
public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};int[] result = reverse(array);for (int i: result){System.out.println(i);} } public static int[] reverse(int[] array){int[] result = new int[array.length];for (int i = 0; i < array.length; i++){result[array.length - i -1] = array[i];}return result; }
多维数组
多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
二维数组的声明和创建:
int[][] a = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}};
int[][] a = new int[2][5];
扩展内容
Arrays 类
数组对象本身并没有提供什么方法可以供我们调用,但 API 中提供了一个工具类
java.util.Arrays
供我们使用
- 数组的工具类
java.util.Arrays
- Arrays 类中的方法都是 static 修饰的 静态 方法,可以直接使用类名进行调用
- 常用功能:
- 给数组赋值:通过
fill
方法 - 对数组排序:通过
sort
方法 - 比较数组:通过
equals
方法比较数组中的元素是否相等 - 查找数组元素:通过
binarySearch
方法能对排序好的数组进行二分查找
- 给数组赋值:通过
示例一:采用 Arrays.toString
快速打印数组数据
import java.util.Arrays;int[] a = {1, 2, 45, 63, 8};
System.out.println(Arrays.toString(a)); // 输出为 [1, 2, 45, 63, 8]
示例二:采用 Arrays.sort
进行升序排序
import java.util.Arrays;int[] a = {1, 2, 45, 63, 8};
Arrays.sort(a);
System.out.println(Arrays.toString(a)); // 输出为 [1, 2, 8, 45, 63]
冒泡排序
总共有八大排序方法,而冒泡排序无疑是最为出名的排序算法之一
冒泡排序的时间复杂度为 O(n²)
示例:一种简单的实现方法
public static void sort(int[] array){for (int i = 0; i < array.length - 1; i++){for (int j = 0; j < array.length - 1 - i; j++){if (array[j] > array[j+1]){int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;}}}System.out.println(Arrays.toString(array));
}
稀疏数组
- 当一个数组中大部分元素为0,或者为同一值时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值,把具有不同值的元素值和行列记录在一个小规模的数组中,从而缩小程序的规模
- 示例:下图左边是原始数组,右边是稀疏数组,其中稀疏数组的第一行记录了原始数组的总行列及不同值个数,其余行记录不同值的具体行列和数值