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

news2025/7/21 5:27:10

目录

目录

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(){
            @Override
            public 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;
    }

    @Override
    public 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>() {
            @Override
            public 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.coloradmin.cn/o/1102354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文研读|TextBack: Watermarking Text Classifiers using Backdooring

目录 论文信息文章简介研究动机研究方法水印生成水印嵌入版权验证 实验结果保真度 & 有效性消融实验 方法评估相关文献 论文信息 论文名称&#xff1a;TextBack: Watermarking Text Classifiers using Backdooring 作者&#xff1a;Nandish Chattopadhyay, et al. Nanyang…

如何选择靠谱且适合自己的IC公司?(内附各大厂薪资加班情况分析)

近期&#xff0c;有不少同学私信手里有几个offer&#xff0c;却不知道该怎么选择 &#xff1f;这着实令找不到工作的小伙伴们羡慕啊&#xff0c;今天IC修真院就来给大家分析一下如何选择靠谱且适合自己的IC公司 &#xff1f; 目前市面上可选择的芯片公司有哪些&#xff1f; 关…

SLM6500 适用于单节锂电池充电芯片 2A同步降压型鲤电池充电电路

SLM6500 是一款面向5V交流适配器的2A离子电池充电器。它是采用1.5MH2固定频率的同步降压型转换器&#xff0c;因此具有高达90%以上的充电效率&#xff0c;自身发热量极小。 SLM6500包括完整的充电终止电路、自动再充电和一个精确度达土1%的4.2V预设充电电压&#xff0c…

Linux | vim的入门手册

目录 前言 一、什么是vim 二、vim编辑器的模式 1、插入模式 &#xff08;1&#xff09;用vim打开文件 &#xff08;2&#xff09;进入插入模式 2、默认模式 &#xff08;1&#xff09;光标移动 &#xff08;2&#xff09;复制、粘贴与剪切操作 &#xff08;3&#x…

毫米波雷达与其他传感器的协同工作:传感器融合的未来

随着科技的不断进步&#xff0c;传感技术在各个领域的应用愈发广泛。毫米波雷达作为一种重要的传感器技术&#xff0c;以其高精度、强穿透力和适应性强等优点&#xff0c;在军事、医疗、汽车、工业等领域都得到了广泛应用。然而&#xff0c;单一传感器的局限性也逐渐显现&#…

017 基于Spring Boot的食堂管理系统

基于Spring Boot的食堂管理系统 项目介绍 本项目是基于Java的管理系统。采用前后端分离开发。前端基于bootstrap框架实现&#xff0c;后端使用Java语言开发&#xff0c;技术栈包括但不限于SpringBoot、MyBatis、MySQL、Maven等&#xff0c;开发工具为IDEA。 功能介绍 主页 …

day28--JS(同步异步代码,回调函数地狱,promise链式调用,async函数和await,事件循环,宏任务与微任务)

目录 同步异步代码&#xff1a; 回调函数地狱&#xff1a; Promise Promise.all静态方法 链式调用 async函数和await&#xff1a; 语法&#xff1a; 捕获错误try...catch&#xff1a; 事件循环--执行过程&#xff1a; 宏任务与微任务&#xff1a; 同步异步代码&#…

OpenCV4 :并行计算cv::parallel_for_

OpenCV4 &#xff1a;并行计算cv::parallel_for_ 在计算机视觉和图像处理领域&#xff0c;OpenCV&#xff08;开源计算机视觉库&#xff09;是一个非常强大和广泛使用的库。随着图像分辨率的提高和计算任务的复杂度增加&#xff0c;实时处理变得越来越困难。为了解决这个问题&…

基于springboot实现汉服文化分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述汉服文化平台网站的当前背景以及系统开发的…

selenium教程 —— css定位

说明&#xff1a;本篇博客基于selenium 4.1.0 selenium-css定位 element_css driver.find_element(By.CSS_SELECTOR, css表达式) 复制代码 css定位说明 selenium中的css定位&#xff0c;实际是通过css选择器来定位到具体元素&#xff0c;css选择器来自于css语法 css定位优点…

使用cpolar内网端口映射技术实现U8用友ERP本地部署的异地访问

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上&#xff0c;点击开始菜单栏&#xff0c;打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

Linux 如何进行内存分配

虚拟内存管理回顾 在 Linux 操作系统中&#xff0c;虚拟地址空间的内部又被分为内核空间和用户空间两部分&#xff0c;不同位数的系统&#xff0c;地址空间的范围也不同。比如最常见的 32 位和 64 位系统&#xff0c;如下所示&#xff1a; 通过这里可以看出&#xff1a; 32 位…

【网络安全 --- MySQL数据库】网络安全MySQL数据库应该掌握的知识,还不收藏开始学习。

四&#xff0c;MySQL 4.1 mysql安装 #centos7默认安装的是MariaDB-5.5.68或者65&#xff0c; #查看版本的指令&#xff1a;[rootweb01 bbs]# rpm -qa| grep mariadb #安装mariadb的最新版&#xff0c;只是更新了软件版本&#xff0c;不会删除之前原有的数据。 #修改yum源的配…

完全掌握Nginx的终极指南:这篇文章让你对Nginx洞悉透彻

Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff08;一个worker进程只占用10-12M内存&#xff09;&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 上图基本上说明了当下流行的技术架构&#xff0c;其…

软考系统架构设计师考试冲刺攻略

系统架构冲刺攻略 上篇为综合知识&#xff0c;介绍了系统架构设计师应熟练掌握的基本知识&#xff0c;主要包括绪论、计算机系统、信息系统、信息安全技术、软件工程、数据库设计、系统架构设计、系统质量属性与架构评估、软件可靠性、软件架构的演化和维护、未来信息综合技术等…

贪心算法:猫粮兑换最大数量的五香豆

小老鼠存了一些猫粮&#xff0c;他想到猫猫库房兑换最大数量的五香豆。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不…

凉鞋的 Unity 笔记 201. 第三轮循环:引入变量

201. 第三轮循环&#xff1a;引入变量 在这一篇&#xff0c;我们进行第三轮 编辑-测试 循环。 在之前我们编写了 输出 Hello Unity 的脚本&#xff0c;如下: using System.Collections; using System.Collections.Generic; using UnityEngine;public class FirstGameObject …

低代码加速软件开发进程

IT 团队依靠笨重的软件开发流程和密集型的手工编码来构建可靠的现代应用程序的时代即将结束。随着新自动化技术的兴起、开发人员的短缺&#xff0c;以及渴望创新的客户和最终用户的需求迅速提高&#xff0c;软件行业被迫寻求替代方法&#xff0c;要求不仅提供服务和产品&#x…

那些你面试必须知道的JS知识点

目录 1、JS数据类型有哪些&#xff1f;2、延迟加载JS有哪些方式&#xff1f;3、 和 有什么不同&#xff1f;4、null和undefined的区别5、JS微任务和宏任务6、作用域考题7、JS对象考题8、JS作用域this指向原型考题9、JS判断变量是不是数组&#xff0c;你能写出哪些方法&#xff…

四、Node Exporter

一、Exporter结束 可以通过一个 metrics 接口为 Prometheus 提供监控指标&#xff0c;最好的方式就是直接在目标应用中集成该接口&#xff0c;但是有的应用并没有内置支持 metrics 接口&#xff0c;比如 linux 系统、mysql、redis、kafka 等应用&#xff0c;这种情况下就可以单…