数组,冒泡排序,比较器,内存分析

定义

相同类型数据有序集合

//方式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
posted @   jpy  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示