Arrays类

基本介绍

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

运用实例

import java.util.Arrays;
public class Array {
    public static void main(String[] args) {
        int[] a={4,5226,846,57,569,336,5,2,1};
        System.out.println(a);//输出:[I@1540e19d

        //打印出数组中的元素,调用了Arrays类中的toString方法
         System.out.println(Arrays.toString(a));//输出[4, 5226, 846, 57, 569, 336, 5, 2, 1]
        //调用PrintArrays方法
        PrintArray(a);

        //数组排序:升序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));

        //数组填充:把val中的值替换掉数组中的值
        Arrays.fill(a,0);
        System.out.println(Arrays.toString(a));
        //数组填充:把val中的值替换掉数组中2-4(不包含4)之间的元素值
        Arrays.fill(a,2,4,0);
        System.out.println(Arrays.toString(a));
    }
    //Arrays类中的方法也是程序员编写的,我们自己也可以编写出来
    //定义一个打印数组中的元素的方法
    public static int[] PrintArray(int[] a){
        for (int i = 0; i < a.length; i++) {
            if (i==0){
                System.out.print("[");
            }
            if (i==a.length-1){
                System.out.println(a[a.length-1]+"]");
            }else{
                System.out.print(a[i]+", ");
            }
        }
        return a;
    }
}

冒泡排序

基本介绍

  • 冒泡排序是最出名的排序算法之一。总共由八大排序
  • 代码:两成循环,外层冒泡轮数,里层依次比较,江湖中人尽皆知
  • 算法复杂度为O(n^2)

运用实例

import java.util.Arrays;
public class PaiXu {
    public static void main(String[] args) {
        int[] a={4,85,69,2,47,9546,1};
        MaoPao(a);
    }

    //冒泡排序
    //1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
    //2.每一次比较都会产生一个最大的或者最小的数
    //3.下一轮则可以少一次排序
    //4.依次循环,知道结束
    public static void MaoPao(int[] a){
        int tep;
        boolean flag=false;//通过flag标识位减少没有意义的排序
        //外层循环,判断需要走多少次
        for (int i = 0; i < a.length-1; i++) {
            //里层循环,比较两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
            for (int j = 0; j < a.length-1; j++) {
                if (a[j]>a[j+1]){
                    tep=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tep;
                    flag=true;
                }
            }
            if(flag==false){
                break;
            }
        }
        System.out.println("冒牌排序输出结果:"+ Arrays.toString(a));
    }
}

稀疏数组

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

运用实例

public class XiShu {
    public static void main(String[] args) {
        //创建一个二维数组11*11     0:表示没有棋子    1:黑棋    2.白棋
        int[][] a=new int[11][11];
        a[1][2]=1;
        a[2][3]=2;

        //输出原始数组
        System.out.println("输出原始数组");
        for (int[] ints : a) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }


        //转换为稀疏数组保存
        //获取有效值的个数
        int count=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (a[i][j]!=0){
                    count++;
                }
            }
        }
        System.out.println("有效值的个数为:"+count);
        //创建一个稀疏数组
        int[][] b=new int[count+1][3];
        b[0][0]=11;
        b[0][1]=11;
        b[0][2]=count;
        //遍历二维数组,将非零的值,存入稀疏数组中
        int sum=0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j]!=0){
                    sum++;
                    b[sum][0]=i;
                    b[sum][1]=j;
                    b[sum][2]=a[i][j];
                }
            }
        }
        //遍历稀疏数组
        System.out.println("输出稀疏数组:");
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println();
        }


        //稀疏数组还原成原来的数组
        //读取稀疏数组
        int[][] c=new int[b[0][0]][b[0][1]];
        //给其中的元素还原它的值
        for (int i = 1; i < b.length; i++) {
            c[b[i][0]][b[i][1]]=b[i][2];
        }
        //打印数组
        System.out.println("输出原始数组:");
        for (int i = 0; i < c.length; i++) {
            for (int j = 0; j < c[i].length; j++) {
                System.out.print(c[i][j]+"\t");
            }
            System.out.println();
        }
    }
}