1.Arrays类

  • 数组的工具类java.util.Arrays
  • 由于数组对象本身没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作
  • 查看JDK帮助文档
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”)
  • 具有以下常用功能
    • 给数组赋值,通过fill方法
    • 对数组排序:通过sort方法,按升序
    • 比较数组:通过equals方法比较数组中元素值是否相等
    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作

2.冒泡排序

  • 冒泡排序是最为出名的排序算法之一,总共有八大排序
  • 冒泡排序:需要两层循环,外层冒泡轮数,里层依次比较
  • 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2)
  • 原理:
    1. 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
    2. 每一次比较,都会产生出一个最大,或者最小的数字
    3. 下一轮则可以少一次排序
    4. 依次循环,直到结束
package com.xf2021.www;
import java.util.Arrays;
public class Demo {
    public static void main(String[] args) {
        int[] a = {1,55,3,67,9,22,34,4,5,7};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] Array){
        int temp;
        for (int i = 0; i < Array.length-1; i++) {
            for (int j = 0; j < Array.length-1-i; j++) {
                if(Array[j+1]<Array[j]){
                    temp=Array[j];
                    Array[j]=Array[j+1];
                    Array[j+1]=temp;
                }
            }
        }
        return Array;
    }
}

3.稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 如下图:左边是原始数组,右边是稀疏数组

解析:【0】记录的是这个数组的特征,6,7,8即代表这个数列有6行7列8个有效值。从【1】开始则开始代表值,比如0,3,22就代表第0行第3列它的值为22,以此类推

普通11*11二维数组:

package com.xf2021.www;
import java.util.Arrays;
public class Demo {
    public static void main(String[] args) {
        int[][] data=new int[11][11];
        data[1][2]=1;
        data[2][3]=2;
        System.out.println("输出原始的数组");

        for (int[] datum : data) {
            for (int i : datum) {
                System.out.print(i+"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

进程已结束,退出代码为 0

稀疏数组:

package com.xf2021.www;
import java.util.Scanner;
public class DemoXishu {
    public static void main(String[] args) {
        System.out.println("请输入输入矩阵大小:");
        Scanner scanner=new Scanner(System.in);
        int x=0;
        x=scanner.nextInt()+1;
        //这里的+1是边界(相当于围墙),在实际打印中不显示也不会用来存放数据
        int[][] data=new int[x][x];
        data[3][4]=1;
        data[5][6]=2;
        data[7][8]=3;
        data[9][9]=4;
        data[10][10]=5;
        data[11][11]=6;
        int sum=0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if(data[i][j]!=0){
                    sum+=1;
               //记录数组中的有效值
               //data.length取的是一维数组的长度,data[i].length取的是第i个二维数组的长度
                }
            }
        }
        int[][] Array=new int[sum+1][3]; //sum+1,其中这个1加的是表头
        Array[0][0]= x;
        Array[0][1]= x;
        Array[0][2]= sum;
        int temp=0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if(data[i][j]!=0){
                    temp++;
                    Array[temp][0]=i;
                    Array[temp][1]=j;
                    Array[temp][2]=data[i][j];
                }
            }
        }
        System.out.println("数组信息:");
        printf(Array);
        int[][] result=new int[x][x];


        for (int i = 1; i < Array[0][2]+1; i++) {
            result[Array[i][0]][Array[i][1]]=Array[i][2];
        }
        for (int i = 0; i < result.length; i++) {
            for (int j = 0; j < result.length; j++) {
                for (int k = 1; k < Array.length-1; k++) {
                    if (i != Array[k][0]  ) {
                        continue;
                    }
                    if (j != Array[k][1]) {
                        result[j][i] = 0;
                        break;
                    }
                }
            }
        }
        System.out.println("稀疏数组打印:");
        printArray(result);
    }
    public static void printf(int[][]a){  //快速打印
        for (int[] datum : a) {
            for (int i : datum) {
                System.out.print(i+"\t");
            }
            System.out.println();
        }
    }
    public static void printArray(int[][]a){  //进行数组打印
        for (int i = 1; i < a.length; i++) {
            for (int j = 1; j < a[i].length; j++) {
                System.out.print(a[i][j]+"\t"); 
            }
            System.out.println();
        }

    }

}

怎么说呢,这是我写的一个稀疏数组的Demo,可以看一看,学习学习,如果实在看不懂就算了,毕竟有些太跳跃太抽象了,这点可以跳过吧。代码的运行效果如下:

数组信息:
11 11 3
3 4 1
5 6 2
7 8 3
稀疏数组打印:
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 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 0 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 3 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

进程已结束,退出代码为 0


You got to put the past behind you before you can move on.