Java常用API(三)

news2024/11/18 11:23:10

一、Arrays类

1.定义

Arrays是一个用于操作数组的工具类

2.常用方法

1.toString方法 
public class Demo {
    public static void main(String[] args) {
        //toString  将数组变成字符串
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
} 

通过源码可以发现,就是很普通的遍历数组,将数组元素添加到 StringBuilder 对象中。

2.binarySearch方法
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //binarySearch  二分查找法查找元素(前提:数组必须有序且升序)
        System.out.println(Arrays.binarySearch(arr, 10));//9
        System.out.println(Arrays.binarySearch(arr, 2));//1
        System.out.println(Arrays.binarySearch(arr, 20));//-11
    }
}

细节:

① 二分查找的前提是有序表,但是对于 binarySearch 方法,还需要是升序的。

② 如果要查找的元素存在,返回索引;如果不存在,返回的是   -插入位置 - 1。

question:为什么需要 -1 呢?

对于该数组,如果要查找数字 0 ,此时 0 是不存在的。

如果只返回 -插入位置,也就是 -0 ,即 0 。

此时就没法确定,返回的这个 0 是表示数字 0 存在时返回的索引,还是不存在时的返回值。

为了避免这样的情况产生,java在此基础上,进行了 -1。

3.copyOf 方法
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //copyOf  拷贝数组
        int[] newArr = Arrays.copyOf(arr, 20);
        System.out.println(Arrays.toString(newArr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    }
}

细节:

方法底层实际上调用的就是 System 类的 arraycopy 方法。

②  参数一是原数组,参数二表示新数组的长度。方法的底层会根据第二个参数来创建新的数组

I.   如果新数组的长度 < 原数组的长度,则部份拷贝

II.  如果新数组的长度 = 原数组的长度,则完全拷贝

III. 如果新数组的长度 > 原数组的长度,则会补上默认初始化值。

4.copyOfRange方法
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //copyOfRange  拷贝数组(指定范围)--> 包头不包尾,包左不包右
        int[] newArr = Arrays.copyOfRange(arr, 0, 9);
        System.out.println(Arrays.toString(newArr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9]
    }
}

细节:

copyOfRange 方法在拷贝数组时,包头不包尾,包左不包右。

5.fill 方法 
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        //fill  填充数组
        Arrays.fill(arr, 100);
        System.out.println(Arrays.toString(arr));
        //[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
    }
}

细节:

在底层,实质上就是一个 for 循环,将数组的每一个元素进行覆盖。

 6.sort 方法
public class Demo {
    public static void main(String[] args) {
        int[] arr = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};

        //sort  排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}

细节:

默认情况下,给基本数据类型进行升序排列,底层使用的是快速排序

question:如果我想对数组进行降序,如何实现?

************************************************************************************************************** 

7.sort 重载方法
public class Demo {
    public static void main(String[] args) {
        Integer[] arr = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};

        //public static void(数组, 排序规则)  按照指定规则进行排序
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        System.out.println(Arrays.toString(arr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}

细节:

该方法只能给引用数据类型进行排序,如果数组是基本数据类型,需要变成其对应的包装类。

② 该方法的第二个参数是一个接口,表示排序规则。所以调用方法时,可以使用匿名内部类来作为这个接口的实现类对象。

③  底层原理是使用折半插入排序(插入排序 + 二分查找)。

④ compare 方法的形参:

I.  o1 表示在无序序列中,遍历得到的每一个元素;

II. o2 表示有序序列中的元素(按二分查找的顺序)。

compare 方法的返回值:

I.  负数:表示当前要插入的元素 < 已排好的元素,插在前面

II. 正数:表示当前要插入的元素 > 已排好的元素,插在后面

III.   0  : 表示当前要插入的元素 = 已排好的元素,同样也插在后面

结论:

(1)待排(o1)-已排(o2)为正,说明待排 > 已排,待排放已排右边,即是升序。

(2)已排(o2)-待排(o1)为正,说明已排 > 待排,已排放待排右边,既是降序。

二、lambda表达式 

1.函数式编程

面向对象编程:先创建对象,再让对象做事情。、

 对于这种写法中,我们只关心方法中的逻辑(方法体),并不关心是哪个对象调用了这个方法

但是对于面向对象编程,又不得不先创建对象,所以造成了一定的麻烦。

**************************************************************************************************************

函数式编程:忽略面向对象的复杂语法,强调做什么,而不是谁去做。

2.函数式接口

函数式接口:有且仅有一个抽象方法接口(两个条件缺一不可)。 

接口上方可以加上 @FunctionalInterface 注解进行验证,若不满足条件,则会报错。

3.Lambda表达式

Lambda表达式是JDK8开始后的一种新的语法格式。

(1)Lambda表达式的完整格式

省略 new,接口名,函数名等,用一个箭头让形参指向方法体,即:() -> {}

注意点:

① Lambda表达式可以用来简化匿名内部类的书写

② Lambda表达式只能简化函数式接口的匿名内部类的写法。

public class Demo {
    public static void main(String[] args) {
        Integer[] arr = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};

        //public static void(数组, 排序规则)  按照指定规则进行排序
        Arrays.sort(arr,(Integer o1, Integer o2) -> {
                return o1 - o2;
            }
        );
        System.out.println(Arrays.toString(arr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}
(2) Lambda表达式的简写格式

即:凡是能推导出来的,都可以省略。

具体省略规则:

① 参数的数据类型可以省略不写

② 如果只有一个参数,参数类型可以省略,同时()也可以省略。

public class Demo {
    public static void main(String[] args) {
        Greeting greeting = name -> {
            System.out.println("Hello " + name);
        };

        greeting.greet("John");
    }
}


@FunctionalInterface
interface Greeting {
    public abstract void greet(String name);
}

③ 如果方法体只有一行,{},分号,return,都可以省略不写,但必须同时省略

public class Demo {
    public static void main(String[] args) {
        Integer[] arr = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};

        //public static void(数组, 排序规则)  按照指定规则进行排序
        Arrays.sort(arr,(o1, o2) -> o1 - o2);
        System.out.println(Arrays.toString(arr));
        //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}

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

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

相关文章

arduino 与 nodeMcu 之间的通信

一、前言 当在 arduino 板子处理好了传感器的数据应该发送给远程服务器这时候就需要用 nodeMcu 了&#xff0c;但是怎么把 arduino 的数据发送到 nodeMcu 呢&#xff0c;这就是本文要实现的。 两个板子之间通信很简单&#xff0c;直接使用 arduino IDE 提供的 Serial.println…

Java web应用性能分析之【压测工具ab】

常用的性能测试工具有&#xff1a;JMeter、loadRunner、ab&#xff1b;对于开发人员来说用的多的是免费的Jmeter和ab&#xff0c;对于测试来说可能用收费的商业软件loadRunner多。在这里我们就说说ab压测工具&#xff0c;因为ab基本满足web接口测试要求&#xff0c;jmeter后面再…

详解生成式人工智能的开发过程

回到机器学习的“古老”时代&#xff0c;在您可以使用大型语言模型&#xff08;LLM&#xff09;作为调优模型的基础之前&#xff0c;您基本上必须在所有数据上训练每个可能的机器学习模型&#xff0c;以找到最佳&#xff08;或最不糟糕&#xff09;的拟合。 开发生成式人工智能…

学习网站地址汇总

本文用于记录学习路上遇到问题&#xff0c;各位大神的分享笔记&#xff0c;内容包括数据库的安装卸载&#xff0c;基础使用&#xff0c;sql语句编写&#xff0c;计算机网络知识等&#xff0c;属于知识大杂烩 1.动态行转列&#xff1a;https://www.cnblogs.com/gaizai/p/375329…

【设计模式深度剖析】【B】【结构型】【对比】| 主要区别包装的不同

&#x1f448;️上一篇:享元模式 回 顾&#xff1a;结构型设计模式 1.代理模式&#x1f448;️ 2.装饰器模式&#x1f448;️ 3.适配器模式&#x1f448;️ 4.组合模式&#x1f448;️ 5.桥接模式&#x1f448;️ 6.外观模式&#x1f448;️ 7.享元模式&#x…

Java操作Excel文档进行读取和写入

目录 读出Excel文档 写入Excel文档 读出Excel文档 使用EasyExcel读取Excel文件: 需要在maven项目中导入EasyExcel依赖 <!-- EasyExcel依赖包 --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><v…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

STM32G030C8T6:EEPROM读写实验(I2C通信)--M24C64

本专栏记录STM32开发各个功能的详细过程&#xff0c;方便自己后续查看&#xff0c;当然也供正在入门STM32单片机的兄弟们参考&#xff1b; 本小节的目标是&#xff0c;系统主频64 MHZ,采用高速外部晶振&#xff0c;实现PB11,PB10 引脚模拟I2C 时序&#xff0c;对M24C08 的EEPRO…

低代码开发平台(Low-code Development Platform)的模块组成部分

低代码开发平台&#xff08;Low-code Development Platform&#xff09;的模块组成部分主要包括以下几个方面&#xff1a; 低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明&#xff1a; …

翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)

What a drag: Dragging a virtual file (HGLOBAL edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080318-00/?p23083 Raymond Chen 2008年03月18日 拖拽虚拟文件&#xff08;HGLOBAL 版本&#xff09; 现在我们已经对简单的数据…

MySQL之创建高性能的索引(七)

创建高性能的索引 InnoDB和MyISAM的数据分布对比 聚簇索引和非聚簇索引欸度数据分布有区别&#xff0c;以及对应的主键索引和二级索引的数据分布也有区别&#xff0c;通常会让人感到困扰和意外。来看看InnoDB和MyISAM时如何存储下面这个表的: CREATE TABLE layout_test ( co…

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…

自监督表示学习和神经音频合成实现语音修复

关键词&#xff1a;语音修复、自监督模型、语音合成、语音增强、神经声码器 语音和/或音频修复的目标是增强局部受损的语音和/或音频信号。早期的工作基于信号处理技术&#xff0c;例如线性预测编码、正弦波建模或图模型。最近&#xff0c;语音/音频修复开始使用深度神经网络&a…

用万界星空科技低代码平台能快速搭建一个云MES系统

一、低代码平台与MES:智能制造的新篇章 随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。传统的MES系统实施周期长、成本高&#xff0c;成为许多企业数字化转型的瓶颈。而低代码开发平台的出现为这一问题提供了新的解决思路。 二、万界…

Linux常用环境Docker安装

一、mysql安装 简单安装 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql mysql容器本地挂载 cd /usr mkdir mysql cd mysql/ mkdir data mkdir conf mkdir init可以手动导入自己的数据库信息 docker run -d \--name mys…

MES系统的功能、架构及应用价值

MES系统生产过程控制的主要方面涵盖了生产计划与控制、生产调度与排程、数据采集与监控、质量控制与管理、物料管理与控制以及设备管理与维护等多个方面。这些功能共同构成了MES系统的核心价值&#xff0c;帮助企业实现生产过程的数字化、智能化和精细化管理。 一、工厂使用MES…

Opera 浏览器与Google联手,推出由Gemini驱动的全新AI功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

JavaScript 动态网页实例 —— 窗口控制

除了打开和关闭窗口之外,还有很多其他控制窗口的方法。例如,可以使用 window.focus()方法使窗口获得焦点,也可以利用与其相对的window.blur 方法使窗口失去焦点。本节介绍移动窗口、改变窗口大小、窗口滚动、窗口超时操作、常用窗口事件、常用窗口扩展等窗口控制的方法和手段。…

AI办公自动化:用通义千问Qwen-Long批量总结PDF长文档内容

Qwen-Long是在通义千问针对超长上下文处理场景的大语言模型&#xff0c;支持中文、英文等不同语言输入&#xff0c;支持最长1000万tokens(约1500万字或1.5万页文档)的超长上下文对话。配合同步上线的文档服务&#xff0c;可支持word、pdf、markdown、epub、mobi等多种文档格式的…

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN判断【10道题】

1.部署BGP/MPLSIP VPN时,当两个VPN有共同的站点,则该共同站点一定不能与两个VPN其他站点使用重叠的地址空间。 2.如图所示&#xff0c;运营商BGP/MPLSIP VPN骨干网通过LDP构建LSP&#xff0c;若想实现用户X两个站点之间通过BGP/MPLSIP VPN网络互通&#xff0c;则PE1和PE2之间必…