09数组

发布时间 2023-10-15 10:11:31作者: 记录从头开始学java

数组

定义方式

int[] nums;
静态初始化
int[] nums1 = {1,2,3,8,5,2};
动态初始化
int[] nums2 = new int[5];	//表示5个长度的int数组
foreach

​ 这种方式简单更适合用来打印输出,但是如果要操作某一个数的话是不好用的

for (int i:nums1) {         // foreach nums1.for 这种方式简单更适合用来打印输出,但是如果要操作某一个数的话是不好用的
    System.out.println(i);
}

多维数组

int[][] arrys = {{1,2},{3,4},{5,6},{7,8}};
for (int[] arry : arrys) {	//arrays.for
    for (int i : arry) {	//array.for
        System.out.print(i+"\t");
    }
    System.out.println();
}

稀疏数组

int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
//打印稀疏数组
for (int[] ints : array) {
    for (int anInt : ints) {
        System.out.print(anInt+"\t");
    }
    System.out.println();
}
01
用一个数组保存稀疏数组
//首先要获取有效值的个数
int sum = 0;
for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        if (array[i][j] != 0){
            sum++;
        }
    }
}
System.out.println("有效值的个数:" + sum);   //总共存放sum个有效值的
int[][] array2 = new int[sum+1][3];   // sum+1 是因为第一行用来存放上面稀疏数组共有11行11列sum个有效值  3是存放 行、列、值
array2[0][0] = array.length;	// array共11行
array2[0][1] = array[0].length; // array共11列
array2[0][2] = sum;				// array共sum个有效值
然后给array2存放有效值
int num = 0;
for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        if (array[i][j] != 0){
            num++;
            array2[num][0] = i; //行
            array2[num][1] = j; //列
            array2[num][2] = array[i][j]; //值
        }
    }
}

输出验证是否正确

for (int i=0;i<array2.length;i++){
    System.out.println("第"+i+"个值");
    System.out.println("行:"+array2[i][0]);
    System.out.println("列:"+array2[i][1]);
    System.out.println("值:"+array2[i][2]);
}
02
根据保存的数组将整个稀疏数组还原
int[][] array3 = new int[array2[0][0]][array2[0][1]];
//在array2里第一个存放的是原稀疏数组共  多少行array2[0][0]]   多少列[array2[0][1]  
//以及几个有效值array2[0][0]][array2[0][2]
//还原稀疏数组
for (int i = 1; i < array2.length; i++) {
    array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
//打印还原的稀疏数组 检查是否正确
for (int[] ints : array3) {
    for (int anInt : ints) {
        System.out.print(anInt+"\t");
    }
    System.out.println();
}
03

Arrays类

int[] a = {1,2,65,2,4,5,89};
System.out.println(a);
System.out.println(Arrays.toString(a));
04
Arrays.fill(a,0,3,7);//给0-3之间的数替换成7  包含0但是不不包含3
System.out.println(Arrays.toString(a));
Arrays.fill(a,5); //全部替换成5
System.out.println(Arrays.toString(a));
05
int[] b = {1,2,65,2,4,5,89};
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(sort(b)));	//数组修改的是指针这里虽然是调用的方法但是已经对数组b排序完成
System.out.println(Arrays.toString(b));			//所以这里数组b在输出也已经是排序好的状态
//Arrays.sort(b);	  这是Arrays类提供的排序方法
//System.out.println(Arrays.toString(b));
06
//冒泡排序
public static int[] sort(int[] b){
    int t = 0;
    Boolean flag = false;
    for (int i = 0; i < b.length; i++) {
        for (int j = 0; j < b.length-1-i; j++) {
            if (b[j]>b[j+1]){
                t = b[j];
                b[j] = b[j+1];
                b[j+1] = t;
                flag = true;
            }
        }
        if (flag==false){
            break;
        }
    }
    return b;
}