Java常用API(三)

一、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));//9System.out.println(Arrays.binarySearch(arr, 2));//1System.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>() {@Overridepublic 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.rhkb.cn/news/337302.html

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

相关文章

DNS 解析过程

文章目录 简介特点查询方式⚡️1. 浏览器缓存2. 系统缓存&#xff08;hosts文件&#xff09;3. 路由器缓存4. 本地域名服务器5. 根域名服务器6. 顶级域名服务器7. 权限域名服务器8. 本地域名服务器缓存并返回9. 操作系统缓存并返回10. 浏览器缓存并访问流程图 总结 简介 DNS&a…

springboot2+mybatis-plus+vue3创建入门小项目[学生管理系统]02[实战篇]

01学习篇 创建一个 vue 项目 创建这个新的文件夹 创建前端项目 eggbox 数据库 SQL CREATE DATABASE IF NOT EXISTS egg DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; USE egg;CREATE TABLE stu (id INT AUTO_INCREMENT, -- 自增主键name VARCHAR(64) NOT NULL, -- 非空…

如何使用前端表格控件实现多数据源整合?

前言 作为表格产品的典型应用场景之一&#xff0c;几乎所有的行业都会存在类 Excel 报表开发这样的应用场景&#xff0c;而在这些应用场景中&#xff0c;经常会遇见下面的这些痛点&#xff1a; 报表数据往往来自多个不同的数据源&#xff0c;需要报表系统能够同时连接多个数据源…

反VC情绪:加密市场需要新的分布式代币发行方式

GME事件 GME事件反应了社交媒体在金融决策中的影响力&#xff0c;散户投资者群体通过集体行动&#xff0c;改变了很多人对股市的看法和参与方式。 GME事件中&#xff0c;meme扮演了核心角色。散户投资者使用各种meme来沟通策略、激励持股行为&#xff0c;创造了一种反对华尔街…

5. MySQL运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…

AdroitFisherman模块安装日志(2024/5/31)

安装指令 pip install AdroitFisherman-0.0.29.tar.gz -v 安装条件 1:Microsoft Visual Studio Build Tools 2:python 3.10.x 显示输出 Using pip 24.0 from C:\Users\12952\AppData\Local\Programs\Python\Python310\lib\site-packages\pip (python 3.10) Processing c:\u…

QT加载CAD文件(二)LibreCAD源码编译

一、LibreCAD LibreCAD是一个开源软件&#xff0c;不用破解激活&#xff0c;可以打开编辑DXF格式的文档&#xff0c;软件大小只有二十多M&#xff0c;对于一些比较简单的图纸还是可以胜任的。本文主要讲该软件源码编译。如果了解软件的基本使用可以参考https://blog.csdn.net/…

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 目前&#xff0c;模型最全的网站是HuggingFace&#xff0c;但是国内需要魔法流量才能访问。另外&#xff0c;现在大模型权重文件都较大&#xff0c;也会浪费不少流量&#xff0c;因此这里推荐使用魔搭社区下…

一文学懂Base64编码原理

前言 Base64编码与ASCII编码一样&#xff0c;也是一种编码方式。不同的是ASCII码采用7位二进制数表示&#xff08;包括大小写字母、数字、标点符号和一些不可见字符&#xff09;&#xff0c;而Base64采用6位二进制数表示&#xff08;包括大小写字母、0~9数字、和/&#xff09;…

Java | Leetcode Java题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();int[] f new int[n];f[0] triangle.get(0).get(0);for (int i 1; i < n; i) {f[i] f[i - 1] triangle.get(i).get(i…

如何修改开源项目中发现的bug?

如何修改开源项目中发现的bug&#xff1f; 目录 如何修改开源项目中发现的bug&#xff1f;第一步&#xff1a;找到开源项目并建立分支第二步&#xff1a;克隆分支到本地仓库第三步&#xff1a;在本地对项目进行修改第四步&#xff1a;依次使用命令行进行操作注意&#xff1a;Gi…

闽盾杯 2021 DNS协议分析

今年CISCN的Tough DNS 的前戏就是DNS协议分析 直接可以查找到flag的base64形式Zmxh 发现就是请求的dnslog 携带的数据 过滤器就是 dns tshark -r dns.pcapng -T json -Y "dns" >1.json 字段选择 dns.qry.name tshark -r dns.pcapng -T json -Y "dns"…

Linux 编译安装python

以deepin操作系统安装Python3.8.10为例。 下载 python3.8.10 官网下载 Linux要下载源码&#xff0c;进行编译。 下图tarball即tar包&#xff0c;是压缩包的意思。python官网给出两种压缩格式的tarball&#xff0c;下载哪个都可以。 方式一&#xff1a;直接点击链接下载 方式…

如何评价GPT-4o?GPT-4o和ChatGPT4.0的区别是啥呢?

如何评价GPT-4o? GPT-4o代表了人工智能领域的一个重要里程碑&#xff0c;它不仅继承了GPT-4的强大智能&#xff0c;还在多模态交互方面取得了显著进步。以下是几个方面的分析&#xff1a; 技术特点 多模态交互能力&#xff1a;GPT-4o支持文本、音频和图像的任意组合输入与输出…

数据结构:希尔排序

文章目录 前言一、排序的概念及其运用二、常见排序算法的实现 1.插入排序2.希尔排序总结 前言 排序在生活中有许多实际的运用。以下是一些例子&#xff1a; 购物清单&#xff1a;当我们去超市购物时&#xff0c;通常会列出一份购物清单。将购物清单按照需要购买的顺序排序&…

[羊城杯 2021]BabySmc

运行就是输入flag 不知道怎么跳过去的 这个应该就是smc加密的函数了 运行完这个函数才能继续往下 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // r12__int64 v5; // r13unsigned __int64 v6; // raxchar v7; // spcha…

一分钟学习数据安全——自主管理身份SSI基本概念

之前我们已经介绍过数字身份的几种模式。其中&#xff0c;分布式数字身份模式逐渐普及演进的结果就是自主管理身份&#xff08;SSI&#xff0c;Self-Sovereign Identity&#xff09;。当一个人能够完全拥有和控制其数字身份&#xff0c;而无需依赖中心化机构&#xff0c;这就是…

【深度密码】神经网络算法在机器学习中的前沿探索

目录 &#x1f69d;前言 &#x1f68d;什么是机器学习 1. 基本概念 2. 类型 3. 关键算法 4. 应用领域 5. 工作流程 &#x1f68b;什么是神经网络 基本结构 &#x1f682;神经网络的工作原理 前向传播&#xff08;Forward Propagation&#xff09;&#xff1a; 损失函…

20240531在飞凌的OK3588-C开发板上跑原厂的Buildroot测试ETH0接口【仅供参考】

20240531在飞凌的OK3588-C开发板上跑原厂的Buildroot测试ETH0接口 2024/5/31 20:28 rootrk3588-buildroot:/# ifconfig eth0 up rootrk3588-buildroot:/# ifconfig eth1 up rootrk3588-buildroot:/# ifconfig rootrk3588-buildroot:/# rootrk3588-buildroot:/# ifconfig eth1…

Postgresql源码(134)优化器针对volatile函数的排序优化分析

相关 《Postgresql源码&#xff08;133&#xff09;优化器动态规划生成连接路径的实例分析》 上一篇对路径的生成进行了分析&#xff0c;通过make_one_rel最终拿到了一个带着路径的RelOptInfo。本篇针对带volatile函数的排序场景继续分析subquery_planner的后续流程。 subquer…