Day05数组
所有学习内容来自:狂神说java
一、数组
二、数组的声明创建
public class Demo01 {
//变量的类型 变量的名字 = 变量的值
public static void main(String[] args) {
int[] nums;//定义 1.声明一个数组
int nums2[];//定义
nums = new int[10];//2.创建一个数组
//3.给数组元素赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
nums[5] = 6;
nums[6] = 7;
nums[7] = 8;
nums[8] = 9;
System.out.println(nums[0]);//1
System.out.println(nums[9]);//0 int数组默认值为0
}
}
数组的基本特点:
三、数组初始化及内存分析
内存分析
数组初始化
public class Demo02 {
public static void main(String[] args) {
//静态初始化: 创建+赋值
int[] a = {1, 2, 3, 4, 5};
//动态初始化:包含默认初始化
int[] b = new int[5];
b[0] = 1;
}
}
四、数组使用
For-Each循环
举例:
public class Demo03 {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
//打印全部数组元素
for(int i=0; i<nums.length; i++){
System.out.println(nums[i]);
}
for(int j:nums){
System.out.println(j);
}
System.out.println("========================");
//计算所有元素的和
int sum = 0;
for(int i : nums){
sum += i;
}
System.out.println("数组元素的和为:"+sum);
System.out.println("===========================");
//查找最大元素
int biggest = nums[0];
for (int i=1; i<nums.length; i++){
if(nums[i]>biggest){
biggest = nums[i];
}
}
System.out.println("数组中最大的元素为:"+biggest);
}
}
数组作方法入参
数组作返回值
public class Demo04 {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
Demo04 demo04 = new Demo04();
demo04.printArrays(nums);
System.out.println("\n===================");
int[] rev_nums = demo04.reverse(nums);
for(int i: rev_nums){
System.out.print(i);
}
}
//打印数组
public void printArrays(int[] nums){
for (int i:nums){
System.out.print(i);
}
}
//反转数组
public int[] reverse(int[] nums){
int[] rev_nums = new int[nums.length];
for(int i=0; i<nums.length; i++){
rev_nums[i] = nums[nums.length - 1 - i];
}
return rev_nums;
}
}
五、多维数组
举例:
public class MultiDimArrayDemo01 {
public static void main(String[] args) {
int[][] mdArrays = new int[3][4];
int[][] mdArrays2 = {{1, 2},{5, 6},{9, 10}};
mdArrays[0][1] = 1;
System.out.println(mdArrays[0][1]);
System.out.println(mdArrays2[2][1]);
System.out.println(mdArrays2.length);
System.out.println("======================");
printArr(mdArrays2);
}
//打印数组元素
public static void printArr(int[][] nums){
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
System.out.print(nums[i][j]+" ");
}
System.out.println();
}
}
}
六、Arrays类
java.util.Arrays
import java.util.Arrays;
public class arrClassDemo01 {
public static void main(String[] args) {
int[] a = {12, 484 ,32 ,1, 415, 21};
// 打印数组
System.out.println(Arrays.toString(a));
printArray(a);
Arrays.sort(a);
System.out.println(Arrays.toString(a));
// 数组填充
Arrays.fill(a, 2, 4, 0);
System.out.println(Arrays.toString(a));
Arrays.fill(a, 0);
System.out.println(Arrays.toString(a));
}
public static void printArray(int[] a){
System.out.print("[");
for (int i = 0; i < a.length-1; i++) {
System.out.print(a[i]+", ");
}
System.out.println(a[a.length-1]+"]");
}
}
冒泡排序:
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] a = {12, 484 ,32 ,1, 415, 21};
int[] b = bubbleSort(a);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
public static int[] bubbleSort(int[] nums1){
int[] nums = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
nums[i] = nums1[i];
}
// 如果直接使用传入的a数组会导致初始的a数组也被排序,将a数组元素赋给一个新数组之后就不会影响a数组
// 这段可有可无
int toChange = 0;
//循环次数
for (int i = nums.length-1; i > 1; i--) {
// 优化,通过flag标志减少无意义的比较
boolean flag = true;
// 内层循环,进行大小比较
for (int j = 0; j < i; j++) {
if (nums[j] > nums[j+1]){
toChange = nums[j];
nums[j] = nums[j+1];
nums[j+1] = toChange;
flag = false;
}
}
if (flag){
break;
}
}
return nums;
}
}
七、稀疏数组
创建稀疏数组:
public class Demo08 {
public static void main(String[] args) {
// 创建一个二维数组 11*11, 0:没有棋子,1:黑棋,2:白棋
int[][] checkboard = new int[11][11];
checkboard[1][2] = 1;
checkboard[2][3] = 2;
System.out.println("打印原始数组:");
printArray(checkboard);
// 转换为稀疏数组保存
//获取有效值个数
int sum = 0;
for (int[] nums : checkboard){
for (int i : nums){
if (i != 0){
sum ++;
}
}
}
System.out.println("有效值个数:"+sum);
// 2.创建一个稀疏数组的数组
int[][] sparseArr = new int[sum+1][3];
sparseArr[0][0] = checkboard.length;
sparseArr[0][1] = checkboard[0].length;
sparseArr[0][2] = sum;
//后续稀疏数组的值
int num = 1;
for (int i = 0; i < checkboard.length; i++) {
for (int j = 0; j < checkboard[0].length; j++) {
if (checkboard[i][j] != 0){
sparseArr[num][0] = i;
sparseArr[num][1] = j;
sparseArr[num][2] = checkboard[i][j];
num ++;
}
}
}
// 打印稀疏数组
System.out.println("打印稀疏数组:");
printArray(sparseArr);
}
public static void printArray(int[][] arrays){
for (int[] nums : arrays){
for (int i : nums){
System.out.print(i + "\t");
}
System.out.println();
}
}
}
// outs:
//打印原始数组:
//0 0 0 0 0 0 0 0 0 0 0
//0 0 1 0 0 0 0 0 0 0 0
//0 0 0 2 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0 0
//有效值个数:2
//打印稀疏数组:
//11 11 2
//1 2 1
//2 3 2
//还原稀疏数组的值
// 1.读取初始数组维度
int[][] new_checkBoard = new int[sparseArr[0][0]][sparseArr[0][1]];
// 2.还原元素值
for (int i = 1; i < sparseArr.length; i++) {
new_checkBoard[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 3.打印还原后的数组
System.out.println("还原后的数组:");
printArray(new_checkBoard);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」