数组
数组声明创建
代码见真知😎
三种创建数组的方法
三种初始化
默认初始化
去代码里看看😀
**浅
**
深
Java内存分析:
Java内存: 堆 栈 方法区
堆
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
栈
存放基本变量类型(会包含这个基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面的具体地址)
图解
方法区
可以被所有的线程共享
包含了所有的class和 static变量
数组的四个特点
下标越界? 啥东东
运行结果
小结:
数组的使用
1.普通for循环
2.增强for循环
3.数组作方法入参
4.数组作返回值
解释:int[] ReverseArrays = new int[arrays.length];
多维数组
Arrays类
老规矩看代码
冒泡排序(面试喜欢)
看代码
优化
运行结果
稀疏数组
代码见真知
package com.vis_yang.arrays;
public class ChessArrays {
public static void main(String[] args) {
//创建一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋
int[][] arrays1 = new int[11][11]; //行前列后
arrays1[1][2] = 1;
arrays1[2][3] = 2;
//输出原始的数组
for (int[] array : arrays1) {
for (int arr : array) {
System.out.print(arr + " ");
}
System.out.println();
}
System.out.println("以上是原始的数组");
//压缩成稀疏数组
//1.遍历二维数组获取有效值的个数
int sum = 0;
for (int i = 0; i < arrays1.length; i++) {
for (int j = 0; j < arrays1[i].length; j++) {
if (arrays1[i][j] != 0) {
sum += 1;
}
}
}
System.out.println("有效值个数是" + sum + "个");
//2.创建一个稀疏数组的数组 稀疏数组列数是固定的3列,下标也是从0开始 行数随有效个数累计(存储)
int[][] arrays2 = new int[sum + 1][3]; //行前列后 1是头行,每增加一个有效数字就加一行
//以下实际是在赋值稀疏数组的头行 存储原始数组的行列数以及有效数字个数
arrays2[0][0] = 11;//存储原始数组行数
arrays2[0][1] = 11;//存储原始数组列数
arrays2[0][2] = 2;//存储原始数组有效值个数
//3.遍历原始二维数组,将非0的值,存放在稀疏数组中
int count = 0; //实际这里也是在计算有效个数来确定要存的行数
for (int i = 0; i < arrays1.length; i++) { //控制遍历原始数组的行数
for (int j = 0; j < arrays1[i].length; j++) { //控制遍历原始数组的列数
if (arrays1[i][j] != 0) {
count++;
//以下实际是在赋值稀疏数组的下半身 存储有效数字在原始数组中的位置
arrays2[count][0] = i; //存原始数组有效数字的行位置
arrays2[count][1] = j; //存原始数组有效数字的列位置
arrays2[count][2] = arrays1[i][j]; //存原始数组的有效数字的值
}
}
}
//输出稀疏数组
System.out.println("以下是压缩成的稀疏数组:");
System.out.println("行" + " " + "列" + " " + "值");
for (int[] array : arrays2) {
for (int arr : array) {
System.out.print(arr + " ");
}
System.out.println();
}
//还原稀疏数组
System.out.println("还原稀疏数组");
//1.重新构造一个新数组用于还原 //还原长度用稀疏数组的头行数据 // arrays2[0][0]=11
int[][] arrays3 = new int[arrays2[0][0]][arrays2[0][1]]; //11*11的空数组 //arrays2[0][1]=11
//实际已知长度 也可以直接用 new int [11][11]
//2.遍历稀疏数组的下半身找出存的值存回这个数组中
for (int i = 1; i < arrays2.length; i++) { //从1开始,头行不用遍历
arrays3[arrays2[i][0]][arrays2[i][1]] = arrays2[i][2]; //arrays2[i][2]就是原来稀疏数组存的有效数字的值现在存到空数组arrays3中
} //arrays2[i][0] 有效值数字在原来数组中的行
//arrays2[i][1] 有效值数字在原来数组中的列
//遍历打印数组arrays3
for (int[] array : arrays3) {
for (int arr : array) {
System.out.print(arr + " ");
}
System.out.println();
}
}
}
运行结果

京公网安备 11010502036488号