Java第五章

一、数组基础

1. 定义
数组是存储一组相同数据类型数据的容器,属于引用数据类型。

2. 特点

• 内部所有元素数据类型统一

• 创建完成后长度固定,无法修改

• 元素依靠索引访问,索引从0开始,最大索引为数组长度-1

3. 适用场景
批量存储、处理多个同类型数据

二、一维数组

1. 三种初始化方式

1)先声明,再分配空间
int[] arr;
arr = new int[5];
2)声明同时分配空间
int[] arr = new int[5];
3)静态初始化,直接赋值元素
int[] arr = {1,2,3,4,5};
2. 数组默认值

数组创建未手动赋值时,系统自动赋予初始值

• byte、short、int、long:0

• float、double:0.0

• char:空字符 \u0000

• boolean:false

• String、数组等引用类型:null

3. 数组访问与遍历

1. 通过索引读写元素
arr[0] = 10;
System.out.println(arr[0]);
2. 普通for循环遍历
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
3. 增强for循环,仅读取元素
for(int num : arr){
System.out.println(num);
}
4. 基础示例代码

1)数组求和求平均值
public class ArraySum{
public static void main(String[] args){
int[] score = {88,95,76,82,90};
int sum = 0;
for(int i = 0; i < score.length; i++){
sum += score[i];
}
System.out.println("总分:" + sum);
System.out.println("平均分:" + sum * 1.0 / score.length);
}
}
2)获取数组最大、最小值
public class ArrayMaxMin{
public static void main(String[] args){
int[] arr = {12,45,7,99,23};
int max = arr[0];
int min = arr[0];
for(int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
if(arr[i] < min){
min = arr[i];
}
}
System.out.println("最大值:" + max);
System.out.println("最小值:" + min);
}
}
三、二维数组

1. 概念
数组中存储一维数组,可看作多行多列结构。

2. 初始化方式
1)固定行列长度
int[][] arr = new int[2][3];
2)不规则二维数组,每行长度可不同
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
3)静态初始化
int[][] arr = {{1,2},{3,4,5},{6}};
3. 二维数组遍历,嵌套循环
public class TwoArrayTest{
public static void main(String[] args){
int[][] arr = {{11,22},{33,44,55},{66}};
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
四、数组内存分配

1. 栈内存:存放数组变量名,存储数组在堆中的地址值

2. 堆内存:存放数组实体、所有元素数据

3. 地址传递特性
将数组变量直接赋值给另一个变量,两个变量指向堆中同一个数组实体,一方修改元素另一方同步变化
int[] a = {1,2,3};
int[] b = a;
b[0] = 99;
五、数组常见异常

1. ArrayIndexOutOfBoundsException 数组索引越界
触发条件:索引小于0,或索引大于等于数组长度

2. NullPointerException 空指针异常
触发条件:数组变量为null,未指向堆内存实体,直接访问数组元素

六、Arrays工具类

1. 使用前提:导入包 import java.util.Arrays;

2. 常用方法

• Arrays.toString(数组):输出数组全部元素

• Arrays.sort(数组):对数组元素升序排序

• Arrays.equals(数组1,数组2):对比两个数组内所有元素是否完全相同

• Arrays.copyOf(原数组,新长度):复制数组,可实现数组扩容

3. 工具类示例
import java.util.Arrays;
public class ArraysTest{
public static void main(String[] args){
int[] arr = {5,2,9,1,3};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
七、基础排序算法:冒泡排序

原理:相邻两个元素依次对比,逆序则交换,每一轮确定一个末尾最大值
public class BubbleSort{
public static void main(String[] args){
int[] arr = {3,1,5,2,4};
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int num : arr){
System.out.print(num + " ");
}
}
}