进阶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.rhkb.cn/news/160646.html

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

相关文章

深入了解桶排序:原理、性能分析与 Java 实现

桶排序&#xff08;Bucket Sort&#xff09;是一种排序算法&#xff0c;通常用于将一组数据分割成有限数量的桶&#xff08;或容器&#xff09;&#xff0c;然后对每个桶中的数据进行排序&#xff0c;最后将这些桶按顺序合并以得到排好序的数据集。 桶排序原理 确定桶的数量&am…

Unity中用序列化和反序列化来保存游戏进度

[System.Serializable]标记类 序列化 [System.Serializable]是一个C#语言中的属性&#xff0c;用于标记类&#xff0c;表示该类的实例可以被序列化和反序列化。序列化是指将对象转换为字节流的过程&#xff0c;以便可以将其保存到文件、数据库或通过网络传输。反序列化则是将字…

C++桶排序算法的应用:存在重复元素 III

题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDiff abs(nums[i] - nums[j]) < valueDiff 如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

日志技术快速入门

1、创建Maven项目 这里不再说如何创建Maven项目 2、导入相关依赖 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.12</version></dependency>3、创建配置文件 在re…

嵌入式系统学习路径:

嵌入式系统学习路径&#xff1a; 00001. 确保扎实的C语言基础&#xff0c;包括高级编程知识和数据结构算法。 00002. 00003. 学习Linux应用层开发&#xff0c;包括并发程序设计、网络编程和数据库开发。 00004. 00005. 探索无线通信领域&#xff0c;如Zigbee、低功…

【java学习—八】对象类型转换Casting(1)

文章目录 1. 数据类型转换1.1 基本数据类型的 Casting1.2. 对 Java 对象的强制类型转换(造型)2. 对象类型转换举例 1. 数据类型转换 数据类型转换分为基本数据类型转换和对象类型转换。 1.1 基本数据类型的 Casting (1) 自动类型转换&#xff1a;小的数据类型可以自动转换成…

使用eBPF加速阿里云服务网格ASM

背景 随着云原生应用架构的快速发展&#xff0c;微服务架构已经成为了构建现代应用的主要方式之一。而在微服务架构中&#xff0c;服务间的通信变得至关重要。为了实现弹性和可伸缩性&#xff0c;许多组织开始采用服务网格技术来管理服务之间的通信。 Istio作为目前最受欢迎的…

mac虚拟机安装homebrew时的问题

安装了mac虚拟机&#xff0c;结果在需要通过“brew install svn”安装svn时&#xff0c;才注意到没有下载安装homebrew。 于是便想着先安装homebrew&#xff0c;网上查的教程大多是通过类似以下命令 “ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)” 但是都会出现…

Mac OS m1 下安装Gradle5.1

1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 选择 5.1 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/grad…

c语言小白如何入门?

c语言小白如何入门&#xff1f; 作为过来人&#xff0c;我觉得刚开始&#xff0c;先按照课本把每个知识点都弄懂&#xff0c;有不懂的地方&#xff0c;先尝试自己理解或借助互联网先搜一下&#xff0c;还是理解不了&#xff0c;就可以去找学得比较好的同学&#xff0c; 最近很…

HarmonyOS 远端状态订阅开发实例

IPC/RPC 提供对远端 Stub 对象状态的订阅机制&#xff0c; 在远端 Stub 对象消亡时&#xff0c;可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成&#xff0c;当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户&#xff0c;需要实现消…

【Leetcode刷题(数据结构)】:三路划分与三数随机取中的思想实现快速排序的再优化

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均…

Asp.net core Web Api 配置swagger中文

启动项目&#xff0c;如图&#xff1a; 原来是英文的&#xff0c;我们要中文的&#xff0c;WeatherForecastController.cs是一个示例&#xff0c;删除即可&#xff0c;WeatherForecast.cs同时删除&#xff0c;当然不删除也行&#xff0c;这里是删除&#xff0c;创建自己的控制器…

在不安全的集群上启用 Elasticsearch Xpack 安全性

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。 为了增强 Elasticsearch 集群的安全性&#xff0c;你需要执行完全集群重启&#xff0c;并在客户端进行一些更改。 启用身份验证后&#xff0c;所…

linux环境下使用lighthouse与selenium

一、安装谷歌浏览器、谷歌浏览器驱动、lighthouse shell脚本 apt update && apt -y upgrade apt install -y curl curl -fsSL https://deb.nodesource.com/setup_18.x | bash apt install -y nodejs apt install -y npm npm install -g lighthouse apt-get install -y …

vue 01

安装vscode 按照如下方式汉化 给vscode 安装插件 Vetur 安装node.js 下载地址https://nodejs.org/en/download/&#xff0c;选择windows msi 在cmd下检查如下&#xff1a; 检查nodejs版本:node --version 检查npm的安装版本&#xff1a;npm -v 执行命令&#xff1a; npm i…

【机器学习】PyTorch-MNIST-手写字识别

文章目录 前言完成效果一、下载数据集手动下载代码下载MNIST数据集&#xff1a; 二、 展示图片三、DataLoader数据加载器四、搭建神经网络五、 训练和测试第一次运行&#xff1a; 六、优化模型第二次优化后运行&#xff1a; 七、完整代码八、手写板实现输入识别功能 前言 注意…

Android12之报错 error: BUILD_COPY_HEADERS is obsolete(一百六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

OTN较WDM系统的 升级功能

文章目录 1、增加运维规则&#xff0c;具体措施是增加了帧结构&#xff0c;提升业务的监控管理运维能力。2、增加电交叉功能&#xff0c;使得OTN系统可以分别处理客户业务信号和波分信号。 OTN较WDM系统的 升级功能主要表现在下面两方面&#xff1a; 1、增加运维规则&#xff0…

leetcode:507. 完美数(python3解法)

难度&#xff1a;简单 对于一个 正整数&#xff0c;如果它和除了它自身以外的所有 正因子 之和相等&#xff0c;我们称它为 「完美数」。 给定一个 整数 n&#xff0c; 如果是完美数&#xff0c;返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;num…