Java入门基础知识第八课(数组)——冒泡排序、Arrays工具类

前面二白讲了关于数组的概念、语法以及简单的输入输出,实际上关于数组的知识还有很多,接下来咱们讲一下冒泡排序以及一些常用的Arrays工具类,需要记忆的知识很多,而且容易混淆。

一、冒泡排序

简介(原理)

升序为例:

从头开始,每次比较相邻两数

小的交换到前面

每轮结束后最大的数交换到最后

代码实现:

java 复制代码
package com.kgc.se;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 8:50
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo01 {
    public static void main(String[] args) {
//        使用双重for循环实现对数组的升序排序

        int[] nums = {96,45,87,32,11,55,88,30,19,44,63};

        //在排序前输出数组中所有的元素
        System.out.println("数组排序前:");
        for(int i =0;i<nums.length;i++){
            System.out.print(nums[i]+" ");
        }
        System.out.println();

        //升序排序
        //外层循环变量控制比较的轮数
        for(int i =0;i<nums.length-1;i++){
            //内层循环变量控制每一轮的比较次数
            for(int j =0;j< nums.length-1-i;j++){
                //比较相邻的两个元素
                if(nums[j]>nums[j+1]){
                    //交换位置
                    int temp = nums[j];
                    nums[j]=nums[j+1];
                    nums[j+1]=temp;
                }
            }
        }

        //排序结束后,遍历数组
        System.out.println("数组排序后:");
        for(int i =0;i<nums.length;i++){
            System.out.print(nums[i]+" ");
        }
    }
}

二、Arrays工具类

1.String Arrays.toString(数组名)

将数组转换为字符串

例:

java 复制代码
package com.kgc.se;

import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        String string = Arrays.toString(demo);
        System.out.println(string);
    }
}

也可以简写直接输出,结果一样

java 复制代码
package com.kgc.se;

import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
    }
}

2.Arrays.sort(数组名)

对数组进行升序排序,可以写冒泡排序代码,也可以直接使用Arrays类中的sort()方法进行排序

例:

java 复制代码
int[] nums = {56,36,78,12,95,40,33};
        System.out.println("数组排序前:");
        System.out.println(Arrays.toString(nums));
        Arrays.sort(nums);
        System.out.println("数组排序后:");

3.boolean Arrays.equals(数组名1,数组名2)

比较两个数组是否相同,如果两个数组中的元素个数,对应下标上的元素值相同,返回true,否则返回false

例:

java 复制代码
package com.kgc.se;

import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        int [] demo1 = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
        boolean result = Arrays.equals(demo,demo1);
        System.out.println("result = " + result);

    }
}

4.Arrays.fill()

1)static void fill(int[] a, int val)

将指定的 int 值分配给指定 int 型数组的每个元素。

例:

java 复制代码
package com.kgc.se;

import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        Arrays.fill(demo,250);
        System.out.println(Arrays.toString(demo));

    }
}

2)static void fill(int[] a, int fromIndex, int toIndex, int val)

将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。注意:包含fromIndex的元素,不包含toIndex的元素

java 复制代码
package com.kgc.se;

import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");

        Arrays.fill(demo,2,4,250);
        System.out.println(Arrays.toString(demo));

    }
}

5.Arrays.copyOf

static int[] copyOf(int[] original, int newLength)

复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。

java 复制代码
package com.kgc.se;

import java.sql.Array;
import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};

        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        int[] demo1 =  Arrays.copyOf(demo,4);
        System.out.println(Arrays.toString(demo1));

    }
}

6.Arrays.copyOfRange

static int[] copyOfRange(int[] original, int from, int to)

将指定数组的指定范围复制到一个新数组。

注意:包含开始下标的元素值,不包含结束下标的元素值

java 复制代码
package com.kgc.se;

import java.sql.Array;
import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};

        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        int[] demo1 = Arrays.copyOfRange(demo,2,5);
        System.out.println(Arrays.toString(demo1));

    }
}

扩展:除了上面的Arrays类中的copyOf()方法和copyOfRange()方法可以复制数组,System类中也有一个方法可以复制数组

static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

src - 源数组。

srcPos - 源数组中的起始位置。

dest - 目标数组。

destPos - 目标数据中的起始位置。

length - 要复制的数组元素的数量。

java 复制代码
package com.kgc.se;

import java.sql.Array;
import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        int[] demo1 = new int[10];
        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        System.arraycopy(demo,3,demo1,1,4);
        System.out.println(Arrays.toString(demo1));

    }
}

7.Arrays.binarySearch

1)static int binarySearch(int[] a, int key)

使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。

注意:使用Arrays类中查找数组元素的方法之前,要对数组进行排序,否则不能保证查找结果的正确性

java 复制代码
package com.kgc.se;

import java.sql.Array;
import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        Arrays.sort(demo);
        System.out.println(Arrays.toString(demo));
        int index = Arrays.binarySearch(demo,8);
        System.out.println("8的值在数组中的下标为: " + index);


    }
}

2)static int binarySearch(int[] a, int fromIndex, int toIndex, int key)

使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。注意:查找范围包含开始下标元素,不包括结束下标元素值

java 复制代码
package com.kgc.se;

import java.sql.Array;
import java.util.Arrays;

/**
 * @JdkVersion: 17
 * @Author: 二白程序员
 * @Date 2024/4/9 13:59
 * QQ:1512015112
 * VX:18056394367
 */


public class Demo {
    public static void main(String[] args) {
        int [] demo = {1,3,5,7,27,8,22};
        System.out.println(Arrays.toString(demo));
        System.out.println("--------------------------");
        Arrays.sort(demo);
        System.out.println(Arrays.toString(demo));
        int index = Arrays.binarySearch(demo,2,6,8);
        System.out.println("8的值在数组中的下标为: " + index);


    }
}
相关推荐
Mos_x几秒前
SpringBoot】Spring Boot 项目的打包配置
java·后端
qianbailiulimeng4 分钟前
【Spring Boot】Spring Boot解决循环依赖
java·后端
何中应4 分钟前
Spring Boot解决循环依赖的几种办法
java·spring boot·后端
donotshow5 分钟前
SpringBoot】Spring Boot 项目的打包配置
java·后端
zhangfeng11335 分钟前
亲测有效的mem 流行病预测,时间序列预测,r语言做移动流行区间法,MEM流行病阈值设置指南
开发语言·r语言·生物信息
鬼火儿6 分钟前
Spring Boot 整合 ShedLock 处理定时任务重复
java·后端
王元_SmallA8 分钟前
【Spring Boot】Spring Boot解决循环依赖
java·后端
小圆53117 分钟前
java-learn(9):常见算法,collection框架
java·开发语言·算法
nbsaas-boot29 分钟前
SaaS 租户上下文传播架构
java·架构·saas