进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)

目录

目录

API                

        1.0 Arrays 类的说明

        1.1 Arrays 类中的 toString() 静态方法

        1.2  Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法

        1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法

        1.4 Arrays 类中的 setAll(double[] array, IntToDoubleFunction generator) 静态方法

        1.5 Arrays 类中的 sort() 静态方法

        1.6 但是这个 sort() 方法是有弊端的,假设要求排列不是基本数据类型呢?(要求是 Student 类型的对象)


API                

        1.0 Arrays 类的说明

        Arrays 类是Java编程语言中的一个类,它提供了一些静态方法来操作数组。这些方法包括数组排序、搜索、填充等功能。这些静态方法可以直接通过 Arrays 类调用,而无需创建 Arrays 的实例。通过使用 Arrays 类的方法,我们可以更方便地对数组进行操作和处理。

        1.1 Arrays 类中的 toString() 静态方法

        通过 toString() 静态方法可以将数组内的全部内容以字符型串的形式输出,返回的是字符串类型。

代码如下:

import java.util.Arrays;public class ArraysAPI {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5};//调用静态方法String str = Arrays.toString(arr);System.out.println(str);}
}

运行结果如下:

        1.2  Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法

        通过这个静态方法,复制一个可以指定起始位置到末尾位置的数组,返回相同类型的数组。

代码如下:

import java.util.Arrays;public class ArraysAPI {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5};int[] arr1 = Arrays.copyOfRange(arr,0,6);System.out.println(Arrays.toString(arr));}
}

运行结果如下:

        要注意的是这指定的范围 [0,6)包前不包后,返回是一个新的数组。

        1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法

        通过这个方法可以拷贝数组,可以指定新数组的长度大小。

代码如下:

import java.util.Arrays;public class ArraysAPI {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5};int[] arr1 = Arrays.copyOf(arr,3);System.out.println(Arrays.toString(arr1));}
}

代码如下:

        1.4 Arrays 类中的 setAll(double[] array, IntToDoubleFunction generator) 静态方法

        把数组中的数据进行修改之后又返回原数组,此静态方法并没有创建一个新的数组。该方法一共有两个参数,第一个参数为数组名,把要目标数据传进去。第二个参数为匿名内部类,需要重写里面的方法。

setAll(double[] array, IntToDoubleFunction generator) 静态方法内部的情况

具体来看看这静态方法的传参:

        这里可以简单的理解为,匿名内部类作为参数的时候,需要重写该父类、接口的抽象方法,那么就可以认为传入匿名内部类就是传递了一个自定义的方法。

代码如下:

import java.util.Arrays;
import java.util.function.IntToDoubleFunction;public class ArraysAPI {public static void main(String[] args) {double[] arr = new double[]{1.0, 2, 9, 4, 5};Arrays.setAll(arr,new IntToDoubleFunction(){@Overridepublic double applyAsDouble(int value) {return arr[value] * 0.8;}});System.out.println(Arrays.toString(arr));}
}

运行结果:

        1.5 Arrays 类中的 sort() 静态方法

        通过这个方法可以让基本类型的数组按升序的方式排列。该方法并不会创建新的对象,而是直接在原始数组上进行排序。需要注意的是,sort() 方法直接修改了原始数组的顺序,而不是创建一个新的排序后的数组。因此,在使用 sort() 方法时要小心,以免意外修改了原始数组的顺序。如果需要保留原始数组,可以先创建一个副本数组,然后对副本数组进行排序。

代码如下:

import java.util.Arrays;public class ArraysAPI {public static void main(String[] args) {int[] arr = new int[]{5,4,3,2,1};Arrays.sort(arr);System.out.println(Arrays.toString(arr));}
}

运行结果如下:

        1.6 但是这个 sort() 方法是有弊端的,假设要求排列不是基本数据类型呢?(要求是 Student 类型的对象)

        先介绍一个方式来解决这个问题。

        通过 sort() 静态方法传进一个相关的匿名内部类 new Comparator<Student>(){重写的方法}  ,可以简单的理解为,自定义一个用对象里面指定的内容进行比较,就需要重写方法,通过传入匿名内部类去重写自己定义方法。

代码如下:

定义 Student 类;

public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public void setAge(int age) {this.age = age;}
}

将学生的年龄进行按升序排列;

public class ArraysAPI {public static void main(String[] args) {Student[] students = new Student[4];students[0] = new Student("张三",32);students[1] = new Student("李四",21);students[2] = new Student("王五",20);students[3] = new Student("赵六",22);Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if (o1.getAge()> o2.getAge()){return 1;} else if (o1.getAge()< o2.getAge()) {return -1;}return 0;}});System.out.println(Arrays.toString(students));}
}

        这就可以自己定义用哪一个对象的内容进行对象与对象比较了。



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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旧手机热点机改造成服务器方案

如果你也跟我一样有这种想法, 那真的太酷了!!! ok,前提是得有root,不然体验大打折扣 目录 目录 1.做一个能爬墙能走百度直连的热点机(做热点机用) 2.做emby视频服务器 3.做文件服务, 存取文件 4.装青龙面板,跑一些定时任务 5.做远程摄像头监控 6.做web服务器 7.内网穿…

【Linux】文件IO基础知识——下篇

目录 一&#xff0c;stderr 2. errno全局变量 二&#xff0c;文件系统 1. 软链接 2. 硬链接 三&#xff0c;静态库 1. 制作静态库 2. 自动化生成静态库 & 自动发布库与头文件 3. 如何使用第三方库 法&#xff08;一&#xff09;&#xff1a;修改系统文件库 …

【milkv】更新rndis驱动

问题 由于windows升级到了11&#xff0c;导致rndis驱动无法识别到。 解决 打开设备管理器&#xff0c;查看网络适配器&#xff0c;没有更新会显示黄色的图标。 右击选择更新驱动

10种新型网络安全威胁和攻击手法

2023年&#xff0c;网络威胁领域呈现出一些新的发展趋势&#xff0c;攻击类型趋于多样化&#xff0c;例如&#xff1a;从MOVEit攻击可以看出勒索攻击者开始抛弃基于加密的勒索软件&#xff0c;转向窃取数据进行勒索&#xff1b;同时&#xff0c;攻击者们还减少了对传统恶意软件…

【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程

PHP安装 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php7apache2_4.dll这个文件 2.如果是64位系统要下载x64的&#xff0c;x86的不行 3.下载Zip 2、PHP解压安装 将Zip进行解压&#xff0c;里…

关于罗克韦尔跟西门子PLC之间通讯的解决方案

不同品牌的PLC设备之间通讯一般是通过总线模块&#xff0c;或者直接在PLC内编程实现&#xff0c;这样不仅硬件成本高&#xff0c;而且开发调试的时间都很长&#xff0c;后期维护也相当麻烦。本文采用IGT-DSER智能网关模块&#xff0c;PLC内不用编程&#xff0c;通过PLC现有的以…

windows中elasticsearch7中添加用户名密码验证

1.找到elsatic的bin目录输入cmd 2.生成ca证书 输入 elasticsearch-certutil ca 在es7根目录生成ca证书&#xff0c;输入密码时直接回车即可&#xff0c;否则后面会报错 Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可 Enter password for…

应用在红外线遥控领域中的心率传感信号接收芯片

红外遥控是一种无线、非接触控制技术&#xff0c;具有抗干扰能力强&#xff0c;信息传输可靠&#xff0c;功耗低&#xff0c;成本低&#xff0c;易实现等显著优点&#xff0c;被诸多电子设备特别是家用电器广泛采用&#xff0c;并越来越多的应用到计算机和手机系统中。 红外线…

Vue底层监测数据变化的原理

&#x1f331;前言 &#x1f331; 最近在学习前端&#xff0c;学习Vue框架&#xff0c;学习路线是视频&#xff0b;官方文档&#xff0c;视频看的是b站尚硅谷张天禹老师讲的&#xff0c;我去&#xff0c;讲的是太TM好了&#xff01;&#xff01;&#xff01;不管是前端还是后端…

全自动打包机检测不到货物怎么办?

全自动打包机也称无人化打包机或无人化捆扎机&#xff0c;是指在工作的过程中不需要人工干预&#xff0c;机器可以自动检测、自动输送、自动打包的设备。但最近有一些客户反映打包机不能自己检测到货物了。这是为什么呢&#xff1f; 1、电子眼感应太弱。电子眼的感应程度是可以…

使用目标之间的先验关系提升目标检测器性能

今天跟大家分享阿姆斯特丹大学等提出的用于提升目标检测和实例分割性能的新方法RP-FEM&#xff0c;该方法将目标之间位置的先验关系融入到feature中。 论文标题&#xff1a;Relational Prior Knowledge Graphs for Detection and Instance Segmentation机构&#xff1a;阿姆斯特…

RabbitMQ 安装和使用Demo

同步是阻塞 MQ&#xff1a;消息队列&#xff0c;基础数据结构中"先进先出"的数据结构。用来解决应用解耦&#xff0c;异步消息&#xff0c;流量消峰等问题。 RabbitMQ、RocketMQ、Kafka RocketMQ 是阿里的 应用层开发使用RabbitMQ 大数据开发Kafka MQ是不是微服务都…