数组,冒泡排序,比较器,内存分析
定义
相同类型数据有序集合
//方式1
int[] nums=new int[数组容量]
//方式2
int[] nums1={1,2,3}
nums.length;//数组长度
内存分析
栈
- 基本类型变量(包含基本类型的具体数值)
- 引用对象的变量(存放这个引用在堆里的具体地址)
堆
- new出的对象和数组
- 被所有线程共享,不会存放别的对象引用
方法区
- 所有线程共享
- 包含所有class和static变量
数组特点
- 长度确定,一旦被创建,长度不可改变
- 元素必须是相同类型
- 元素可以是任何数据类型,基本+引用
多维数组
int[][] array = {{1, 2}, {3, 4}, {5, 6, 7}};
System.out.println(array[0][1]);//2
System.out.println(array[2][2]);//7
Arrays类
- sort 排序,默认升序,降序就new Comparator比较器自定义排序规则
- fill(a,value):用value把数组a填满
- fill(a,start,end,value):数组a下标start-end(不包含)用value填充
public static void arraysTest() {
Integer[] a = {15, 2235, 56, 8, 26365};
System.out.println(Arrays.toString(a));
//升序
Arrays.sort(a);
System.out.println(Arrays.toString(a));//[8, 15, 56, 2235, 26365]
//降序
Arrays.sort(a,Collections.reverseOrder());
System.out.println(Arrays.toString(a));//[26365, 2235, 56, 15, 8]
}
Comparator比较器
/*
官方升序:
< return -1
= return 0
> return 1
*/
public static void arraysTest() {
Integer[] a = {15, 2235, 56, 8, 26365};
//升序
Arrays.sort(a, new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
if (a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
//return o1 >= o2 ? 1 : -1;
}
});
System.out.println(Arrays.toString(a));
}
排序
冒泡排序
public static void sort(int[] array) {
boolean flag = false;//标志位减少没意义的比较位
//临时变量
int temp = 0;
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]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
//如果flag==false,说明没有经过排序
if (!flag) {
break;
}
}
System.out.println(Arrays.toString(array));
}
稀疏数组
稀疏数组用来记录有效的坐标
当一个数组中大部分元素为0,或者为同一值,可以用稀疏数组保存该数组
第一行表示数组有:6行,7列,8个有效值
以后的行:有效值在数组中的行,列,有效值
稀疏数组:行数=有效值个数+1 列数=3
package com.jpy.array;
public class ShishuArray {
public static void main(String[] args) {
//1.创建二维数组,11*11
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
//2.按格式输出二维数组
System.out.println("原始数组");
for (int[] ints : array) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
//转为稀疏数组
//获取有效值个数
int count = 0;
for (int[] ints : array) {
for (int anInt : ints) {
if (anInt != 0) {
count++;
}
}
}
System.out.println("有效值个数:" + count);
//创建一个稀疏数组
int[][] array1 = new int[count + 1][3];
array1[0][0] = array.length;
array1[0][1] = array[0].length;
array1[0][2] = count;
//遍历二维数组,将!=0值存放进二维数组
int row = 1;//row计数,从第二行开始填,
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0) {
array1[row][0] = i;
array1[row][1] = j;
array1[row][2] = array[i][j];
row = row + 1;
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i][0] + "\t" + array1[i][1] + "\t" + array1[i][2]);
}
//读取稀疏数组
int[][] array2 = new int[array1[0][0]][array1[0][1]];
//还原元素值,从1开始,0为头部
for (int i = 1; i < array1.length; i++) {
array2[array1[i][0]][array1[i][1]] = array1[i][2];
}
//打印还原后的数组
System.out.println("还原后");
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
}
}
//结果
原始数组
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
还原后
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY