Arrays类 - Java

Arrays类

  • Arrays类
  • 1、常用方法
    • 案例

Arrays类

1、常用方法

Arrays 里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)。

  1. toString 返回数组的字符串形式 Arrays.toString(arr)【案例1】
    在这里插入图片描述

  2. sort 排序(自然排序和定制排序) Integer arr[]={1, -1, 7, 0, 89};【案例2】

  3. binarySearch通过二分搜索法进行查找,要求必须排好序【案例3】
    int index = Arrays.binarySearch(arr,3);

  4. copyOf 数组元素的复制【案例4】
    Integer[] newArr = Arrays.copyOf(arr, arr.length);

  5. fill 数组元素的填充【案例5】
    Integer[] num = new Integer[]{9, 3, 2};
    Arrays.fill(num, 99);

  6. equals 比较两个数组元素内容是否完全一致【案例6】
    boolean equals = Arrays.equals(arr, arr2);

  7. asList 将一组值,转换成list【案例7】
    List asList = Arrays.asList(2, 3, 4, 5, 6, 1);
    System.out.println(“asList=” + asList);

案例

【案例1】

源码:public static String toString(Object[] a)

Integer[] integers = {1, 20, 90};
//遍历数组
for(int i = 0; i < integers.length; i++) {
    System.out.println(integers[i]);
}
//直接使用Arrays.toString方法,显示数组
System.out.println(Arrays.toString(integers));//

在这里插入图片描述

【案例2】排序

源码:public static void sort(Object[] a)

1、排序方法一:可以直接使用之前学过的冒泡排序 , 也可以直接使用Arrays提供的sort方法排序
2、排序方法二:使用Arrays提供的方法sort(),因为数组是引用类型,所以通过sort 排序后,会 直接影响 到实参 arr

Integer arr[] = {1, -1, 7, 0, 89};
Arrays.sort(arr);
System.out.println("===排序后===");
for(int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + "\t");
}

在这里插入图片描述
3. 排序方法三:
【定制排序】 sort 是重载的,也可以通过传入一个接口 Comparator 实现定制排序。
调用定制排序 时,传入两个参数 (1) 排序的数组 arr (2) 实现了Comparator接口的匿名内部类 , 要求实现 compare方法
定制排序的作用是:默认的 sort 方法是按照从小到大的顺序,如果我们想按照从大到小怎么办?——使用下面的代码:

//定制排序
Integer arr[] = {1, -1, 7, 0, 89};
Arrays.sort(arr, new Comparator() { //匿名内部类
    @Override
    public int compare(Object o1, Object o2) {
        Integer i1 = (Integer) o1;
        Integer i2 = (Integer) o2;
        return i2 - i1;
    }
});
System.out.println("===排序后===");
System.out.println(Arrays.toString(arr));

在这里插入图片描述

【分析】
这里体现了接口编程的方式 , 看看源码,就明白【下断点分析】
知识点是:接口Comparator的匿名内部类(重写了compare方法),作为参数,传入sort方法中。
sort方法最底层的函数,用Comparator c来接收这个匿名内部类。c.compare调用重写的方法。自制体现在:我们可以通过compare的不同重写方式,规定sort是由大到小排序,还是由小到大。
让接口中的compare方法决定排序由大到小排序,还是由小到大。


【源码分析】
(1) Arrays.sort(arr, new Comparator())
(2) 最终到 TimSort类的 private static void binarySort(T[] a, int lo, int hi, int start,Comparator<? super T> c)()
(3) 注意这里的 Comparator 是接口。其中定义的方法 int compare(T o1, T o2); 根据源码中对于这个方法的注释:实现 “比较其两个参数的顺序” 的要求。implements实现 Comparator 这个接口的 类,必须实现接口中声明的所有函数。
(4) 执行到 binarySort方法的代码, 会根据动态绑定机制 c.compare() 执行我们传入的匿名内部类的 compare ()。这里虽然上下文的代码没有详细分析,但是通过 if 条件可以看出 分别是对 right 和 left进行赋值。

// binarySort
while (left < right) {
     int mid = (left + right) >>> 1;
     if (c.compare(pivot, a[mid]) < 0)
         right = mid;
     else
         left = mid + 1;
 }

在 binarySort 方法底层,会通过匿名内部类的compare方法来决定排序的顺序

new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
       Integer i1 = (Integer) o1;
        Integer i2 = (Integer) o2;
        return i2 - i1;
   }
}

(5) public int compare(Object o1, Object o2) 返回的值>0 还是 <0
会影响整个排序结果,这就充分体现了 接口编程+动态绑定+匿名内部类的综合使用。
将来的底层框架和源码的使用方式,会非常常见。

没太看懂,点击链接跳转P482看韩老师讲解

【案例3】

  1. 使用 binarySearch 二叉查找
  2. 要求该数组是有序的. 如果该数组是无序(从小到大或者从大到小)的,不能使用binarySearch
  3. 如果数组中不存在该元素,就返回 return -(low + 1); // key not found.
    -(low + 1)中 low的意思是它应该在的位置
Integer[] arr = {1, 2, 90, 123, 567};
int index = Arrays.binarySearch(arr, 567);
System.out.println("index=" + index);

【案例4】

  1. 从 arr 数组中,拷贝 arr.length个元素到 newArr数组中
  2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
  3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException
  4. 该方法的底层使用的是 System.arraycopy()
Integer[] arr = {1, 2, 90, 123, 567};
Integer[] newArr = Arrays.copyOf(arr, arr.length-3);
System.out.println("==拷贝执行完毕后==");
System.out.println(Arrays.toString(newArr));

如果这里超过了arr的长度,那么会用数组元素内容是 null。

【案例5】

使用 99 去填充 num数组,可以理解成是替换原理的元素

Integer[] num = new Integer[]{9,3,2};
//1. 使用 99 去填充 num数组,可以理解成是替换原理的元素
Arrays.fill(num, 99);
System.out.println("==num数组填充后==");
System.out.println(Arrays.toString(num));

【案例6】

equals 比较两个数组元素内容是否完全一致

  1. 如果arr 和 arr2 数组的元素一样,则方法true;
  2. 如果不是完全一样,就返回 false
Integer[] arr = {1, 2, 90, 123, 567};
Integer[] arr2 = {1, 2, 90, 123};
boolean equals = Arrays.equals(arr, arr2);
System.out.println("equals=" + equals);

【案例7】

asList 将一组值,转换成list

  1. asList方法,会将 (2,3,4,5,6,1)数据转成一个List集合
  2. 返回的
    asList 编译类型 List(接口)
    asList 运行类型 java.util.Arrays#ArrayList, 是Arrays类的静态内部类
    private static class ArrayList extends AbstractList
    implements RandomAccess, java.io.Serializable
List asList = Arrays.asList(2,3,4,5,6,1);
System.out.println("asList=" + asList);
System.out.println("asList的运行类型" + asList.getClass());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/219809.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云服务器部署过程(从零开始)

首先介绍如何在 Linux 上复制粘贴 CtrlInsert&#xff0c;或者CtrlshiftC复制文本&#xff0c;使用ShiftInsert或CtrlshiftV 在终端中粘贴文本。 搭建java部署环境 要搭建java部署环境&#xff0c;那么首先就需要在Linux上安装jdk&#xff0c;MySQL等必需工具&#xff0c;接…

01_阿里云_Xshell连接服务器

PC使用Xshell连接阿里云服务器 问题引出 之前使用Xshell连接阿里云服务器连接的好好的&#xff0c;今天准备上去服务器学习Linux发现连不上了&#xff0c;后来发现是防火墙的问题&#xff0c;还有阿里云的安全组也需要设置 解决方案 方法一&#xff1a;&#xff08;简单粗暴…

CGAL的周期三角剖分(相关信息较少)

CGAL的周期二维三角剖分类旨在表示二维平面上的一组点的三角剖分。该三角剖分形成其计算空间的分区。它是一个单纯复体&#xff0c;即它包含任何k-单纯形的所有关联j-单纯形&#xff08;j<k&#xff09;&#xff0c;并且两个k-单纯形要么不重叠&#xff0c;要么共享一个公共…

博客访问量到达2万了!

博客访问量到达2万了&#xff01;这也发生的太快了吧&#xff0c;前两天才1万7千访问量&#xff0c;用了平台送的1500的流量券&#xff0c;粉丝从1个&#xff08;N年前的&#xff09;&#xff0c;蹭蹭的往上涨&#xff0c;这也太“假”了吧。关键我也是个菜鸟自学者&#xff0c…

杂散表的阅读

杂散表得阅读 —— 以Marki公司得手册为例 混频杂散&#xff08;Mixing Spurs&#xff09;是指信号经过混频器时&#xff0c;不仅会与本振混频&#xff0c;还会与本振的高次谐波混频&#xff08;对于第二章说的方波本振&#xff0c;信号只与本振的奇次谐波混频因为方波只含有奇…

写论文焦虑?No,免费AI写作大师来帮你

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…

minio配置监听(对象操作日志)

minio配置监听对象操作 本文档适用于minio2021.3.17版本 有时我们需要查看minio中对象操作的日志&#xff0c;比如像监听minio某一个桶中的删除事件&#xff0c;就需要配置监听。minio支持将监听的结果输出到es、pg、amq等等&#xff0c;下面介绍一下将minio对象操作监听结果输…

《C++ Primer》第11章 关联容器

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 关联容器支持高效关键字查找和访问&#xff0c;两个主要的关联容器是 map 和 set 。map 中的元素是键-值&#xff08; key value &#xff09;对&#xff0c;set 中的元素只包含一个关键字。 标准库提供 8 …

C语言学习笔记之数组篇

数组是一组相同类型元素的集合。 目录 一维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 二维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 数组名 数组名作函数参数 一维数组 数组的创建 type_t arr_name [const_n]; //type_…

Python采集豆丁网站文档数据内容, 保存word文档

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 开发环境: 版 本&#xff1a; python 3.8 编辑器&#xff1a;pycharm 2022.3.2 模块使用: requests --> pip install requests re base64 docx --> pip …

vue中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

K8S部署nginx并且使用NFS存储数据

安装NFS 在master安装NFS systemctl start nfs-server修改配置 /etc/exports /data *(rw,no_root_squash,no_all_squash,sync)目录为 /data 允许所有地址访问 验证下 [rootmaster nginx]# showmount -e 192.168.57.61 Export list for 192.168.57.61: /data *共享可以正常…

我不是DBA之慢SQL诊断方式

最近经常遇到技术开发跑来问我慢SQL优化相关工作&#xff0c;所以干脆出几篇SQL相关优化技术月报&#xff0c;我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到&#xff0c;尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

手动创建spring bean并注入

文章目录 前言一、jar包中,相同class不同类加载器加载的时候是同一个class嘛&#xff1f;二、利用ConfigurableListableBeanFactory手动注册bean注册bean,并自动注入依赖bean根据类型获取注入的bean,两个bean是一个吗? 三、同一份字节码,class隔离,bean隔离总结 前言 注入一个…

2952. 需要添加的硬币的最小数量(结论题)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 分析知&#xff1a;设指针值从1开始依次递增&#xff0c;每次将coins里的值累加起来看能否得到或者大于当前指针值 &#xff0c;否则就将该指针值累加起来&#xff0c;即需要添加的数 class Solution …

JOSEF 单相电压继电器 WY-31A1 DC220V 过压动作,导轨安装

系列型号 单相 JY-45A1电压继电器&#xff1b;JY-45B1电压继电器&#xff1b; JY-45C1电压继电器&#xff1b;JY-45D1电压继电器&#xff1b; JY-41A1电压继电器&#xff1b;JY-41B1电压继电器&#xff1b; JY-41C1电压继电器&#xff1b;JY-41D1电压继电器&#xff1b; …

冬天来了,波司登的高端化“春天”不远了?

最近&#xff0c;羽绒服频繁“贵”上热搜。 在众多热搜词条中&#xff0c;一条“国产羽绒服卖到7000元”的话题一度将波司登推上了舆论的风口浪尖。 对此&#xff0c;波司登在最新的业绩说明会上进行了回应&#xff0c;公司表示&#xff1a;“波司登旗下主品牌及子品牌将形成差…

学习数分--简单案例1

业务背景&#xff1a;某服务类app&#xff0c;近期发现日新增用户数下滑明显。 具体描述&#xff1a;假设公司产品&#xff08;一款本地服务类app&#xff09;&#xff0c;近期发现日新增用户数下滑明显。老板要求你分析&#xff1a;数据异动的原因是什么&#xff1f; #最开始…

揭秘DeepMind、OpenAI成立内幕,马斯克、奥特曼、佩奇、哈萨比斯的爱恨情仇......

前些天OpenAI内斗的政权之争&#xff0c;相信各位看官在吃瓜的同时会感到大为震撼。OpenAI这次“政变”事件&#xff0c;让世人第一次看到那些将决定人工智能发展未来的科技大佬之间的激烈争斗。 但权利的斗争在硅谷AI激荡发展十余年中绝不是第一次。《纽约时报》为此采访了80…

VBA技术资料MF92:将多个Excel表插入Word文档的不同位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…