当前位置: 首页 > article >正文

Java工具类Arrays

一.常用方法

1.

static int[]copyOfRange(int[] original, int from, int to)
          将指定数组的指定范围复制到一个新数组。
static int[]copyOf(int[] original, int newLength)
          复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
static intbinarySearch(int[] a, int key)
          使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
static voidfill(int[] a, int val)
          将指定的 int 值分配给指定 int 型数组的每个元素。
static voidfill(int[] a, int fromIndex, int toIndex, int val)
          将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
static StringtoString(int[] a)
          返回指定数组内容的字符串表示形式。
static voidsort(int[] a)
          对指定的 int 型数组按数字升序进行排序。
static voidsort(int[] a, int fromIndex, int toIndex)
          对指定 int 型数组的指定范围按数字升序进行排序。

import java.util.*;
public class Main
{
    public static void main(String[] args){
        //底层逻辑就是用Stringbuilder写的
        System.out.println("toString-----------------");
        int [] arr = {1,2,3,4,5,6,7};
        System.out.println(Arrays.toString(arr));

        //binarySearch搜索key返回其索引值
        System.out.println("binarySearch-----------------");
        int result = Arrays.binarySearch(arr, 5);//搜索5返回其索引值
        System.out.println(result);

        //copyOf
        //第一个参数:老数组
        //第二个参数:新数组长度
        //新数组更长会补上默认值
        System.out.println("copyof-----------------");
        int[] newArray = Arrays.copyOf(arr, arr.length+1);
        for (int i = 0; i < newArray.length; i++) {
            System.out.print(newArray[i]+" ");
        }

        //copyOfRange指定数组范围,范围包头不包尾
        System.out.println("\n"+"copyOfRange-----------------");
        int[] newArray2 = Arrays.copyOfRange(arr, 0, 5);//包含0索引不包含5索引
        for (int i = 0; i < newArray2.length; i++) {
            System.out.print(newArray2[i]+" ");
        }

        //fill自动填充
        System.out.println("\n"+"fill-----------------");
        Arrays.fill(newArray, 10);
        System.out.println(Arrays.toString(newArray));//[10, 10, 10, 10, 10, 10, 10, 10]

        //sort自动排序
        int[] newArray3 = {2,5,7,6,1,3,4,0};
        Arrays.sort(newArray3);
        System.out.println(Arrays.toString(newArray3));//[0, 1, 2, 3, 4, 5, 6, 7]


    }
}

        

二.关于sort的进阶用法

package hiema.Day21;

import java.util.*;

public class A_sort2 {
    public static void main(String[] args) {
        //public static void sort(数组,规则);
        //第一个参数是要排序的数组、
        //第二个是排序的规则
        //只能给引用数据类型排序,所以基本数据类型要变成包装类
        Integer[] arr = {5,1,3,4,2};

        //第2个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。
        //但是这个实现类,我只要使用一次,所以就没有必要单独的去写一个类,直接采取匿名内部类的方式就可以

        Arrays.sort(arr,new Comparator<Integer>() {
            @Override
            public int compare(Integer o1 ,Integer o2){
                System.out.println("--------------");
                System.out.println("o1:" + o1);
                System.out.println("o2:" + o2);
                return o2-o1;
            }
        });
        // //底层原理:
        // 利用插入排序 + 二分查找的方式进行排序的。
        // 默认把0索引的数据当做是有序的序列,1索引到最后认为是无序的序列。
        // 遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素
        // 把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点。
        //拿着A元素,跟插入点的元素进行比较,比较的规则就是compare方法的方法体
        //如果方法的返回值是负裁,拿着A继续跟前面的数据进行比较
        //如果方法的返回值是正数,拿着A继续跟后面的数据进行比较
        //如果方法的返回值是0,也拿着A继续跟后面的数据进行比较
        //直到能确定A的最终位置为止。


        //compare方法的形式参数:
        //参数一 o1: 表示在无序序列中,遍历得到的每一个元素
        //参数二 o2: 有序序列中的元素


        //返回值:
        //负数:表示当前要插入的元素是小的,放在前面
        //正数:表示当前要插入的元素是大的,放在后面
        //0:表示当前要插入的元素跟现在的元素比是一样的们也会放在后面

        //所以,o1-o2是升序,o2-o1是降序!!!!!!!!!!!!!!!!!!!!

        System.out.println(Arrays.toString(arr));
    }
}

这里的Integer也可以改变成别的类,Student,Class,Teacher等等,排序也可以改成

return stu1.getJavaScore() – stu2.getJavaScore();

http://www.kler.cn/a/459239.html

相关文章:

  • Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
  • gitlab的搭建及使用
  • 解决安装pynini和WeTextProcessing报错问题
  • OCR实践-问卷表格统计
  • perl:多线程 简单示例
  • [CCGridW 2023]Performance Modelling of Graph Neural Networks
  • GPIO相关寄存器,点灯
  • 一次 MySQL IF 函数的误用导致的生产小事故
  • linux上虚拟机显示网络不可用的解决方法
  • 建立一个Macos载入image的实例含界面
  • docker 部署mysql8
  • MySQL如何执行.sql 文件:详细教学指南
  • 今日总结 2024-12-30
  • LeetCode热题100-两数之和【JavaScript讲解】
  • 信息系统常见的系统架构
  • 老鑫网络安全培训课程收费多少钱
  • 知识图谱+大模型:打造全新智慧城市底层架构
  • 数据链路层知识要点
  • VSCode 插件开发实战(十): 环境变量Env设置与管理
  • svn分支相关操作(小乌龟操作版)
  • 添加购物车业务代码
  • 概率论与随机过程--作业2
  • vscode中调用deepseek实现AI辅助编程
  • Mcnemar‘s exact test
  • 【面试系列】深入浅出 Spring Boot
  • 六、链路层,《计算机网络》,谢希仁 《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》