Java数组:Arrays类、冒泡排序、稀疏数组


Arrays类

  • Arrays相关介绍

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

    package com.ibelifly.array;
    
    import java.util.Arrays;
    
    public class ArrayDemo7 {
        public static void main(String[] args) {
            int[] a={12,324,54,23,6457,27,26,85,21,68,426,28};
            //打印数组元素
            System.out.println(Arrays.toString(a));
            //对数组进行排序 升序
            Arrays.sort(a);
            System.out.println(Arrays.toString(a));
            //给数组赋值(填充)
            Arrays.fill(a,0);
            System.out.println(Arrays.toString(a));
        }
    }
    

    在这里插入图片描述

冒泡排序

  • 图例:

    186x129_68373450_20210731-225734

  • 代码实例:

    package com.ibelifly.array;
    
    import java.lang.reflect.Array;
    import java.util.Arrays;
    
    public class ArrayDemo8 {
        public static void main(String[] args) {
            int[] a={5,6,3,6,7,85,7,3,57,8};
            int[] array=sort(a);
            System.out.println(Arrays.toString(array));
        }
        //冒泡循环:两层循环,外层冒泡轮数,里层依次比较
        //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
        //2.每一次比较,都会产生出一个最大,或者最小的数字
        //3.下一轮可以少一次排序
        //4.依次循环,直到结束
        public static int[] sort(int[] array){
            //定义第三临时变量
            int temp=0;
            //外层循环:判断冒泡轮数
            for (int i = 0; i < array.length-1; i++) {
                boolean flag=false; //通过flag标识位减少没有意义的比较(优化做法)
                //内层循环:比较两个数,如果第一个数比第二个数大,则交换位置
                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;
                    }
                }
                if (flag==false){
                    break;
                }
            }
            return array;
        }
    }
    

    在这里插入图片描述

稀疏数组

  • 引言

    • 需求:编写五子棋游戏中,有存盘退出和续上盘的功能

      在这里插入图片描述

    • 分析问题:因为该二维数组的很多值默认值是0,因此记录了很多没有意义的数据

    • 解决:稀疏数组

  • 稀疏数组介绍

    • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组

    • 稀疏数组的处理方式是:

      • 记录数组一共有几行几列,有多少个不同的值
      • 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
    • 如下图,左边是原始数组,右边是稀疏数组

      在这里插入图片描述

  • 代码实例:

    package com.ibelifly.array;
    
    public class ArrayDemo9 {
        public static void main(String[] args) {
            //编写原始棋盘
            //1.创建一个二维数组11*11,0:没有棋子,1:黑棋,2:白棋
            int[][] array1=new int[11][11];
            array1[1][2]=1;
            array1[2][3]=2;
            //输出原始的数组
            System.out.println("输出原始的数组:");
            for (int[] ints : array1) {
                for (int anInt : ints) {
                    System.out.print(anInt+"\t");
                }
                System.out.println();
            }
            //转换为稀疏数组保存
            //1.获取有效值的个数
            int sum=0;
            for (int i = 0; i < array1.length; i++) {
                for (int j = 0; j < array1[i].length; j++) {
                    if (array1[i][j]!=0){
                        sum++;
                    }
                }
            }
            System.out.println("有效值的个数:"+sum);
            //2.创建一个存放稀疏数组
            int[][] array2=new int[sum+1][3];
            array2[0][0]=11;
            array2[0][1]=11;
            array2[0][2]=sum;
            //3.遍历二维数组,将非零的值存放在稀疏数组中
            int count=0;
            for (int i = 0; i < array1.length; i++) {
                for (int j = 0; j < array1[i].length; j++) {
                    if (array1[i][j]!=0){
                        count++;
                        array2[count][0]=i;
                        array2[count][1]=j;
                        array2[count][2]=array1[i][j];
                    }
                }
            }
            //4.输出稀疏数组
            System.out.println("稀疏数组为:");
            for (int[] ints : array2) {
                for (int anInt : ints) {
                    System.out.print(anInt+"\t");
                }
                System.out.println();
            }
            //还原稀疏数组
            //1.读取稀疏数组
            int[][] array3=new int[array2[0][0]][array2[0][1]];
            for (int i = 1; i < array2.length; i++) {
                array3[array2[i][0]][array2[i][1]]= array2[i][2];
            }
            //2.还原稀疏数组
            System.out.println("还原后的数组为:");
            for (int[] ints : array3) {
                for (int anInt : ints) {
                    System.out.print(anInt+"\t");
                }
                System.out.println();
            }
        }
    }
    

    在这里插入图片描述


重要声明:本篇文章整理自B站狂神说Java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值