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.mzph.cn/news/845406.shtml

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

相关文章

故障——pod状态为pending该如何解决

一、报错问题 当您的虚拟机出现如下报错&#xff0c;您首先快照一下虚拟机如果仍然报错 二、解决方法 2.1 任务管理器 首先进入任务管理器&#xff08;CtrlAltDel&#xff09;内&#xff0c;查看所有vmware是否都处在运行的状态&#xff0c;可能会跳出一个比较突兀的进程&#…

【Spring Cloud】微服务链路跟踪Sleuth

目录 为什么要使用微服务链路跟踪微服务的现状多服务协同工作复杂的调用链条容易出错 微服务链路跟踪需要实现的需求实现监控决策避免技术债务快速定位故障 微服务链路跟踪的技术要求低消耗应用透明延展性可控采样率可视化 Spring Cloud Sleuth简介Spring Cloud Sleuth的4个特点…

自动控制:控制系统的稳定性

自动控制&#xff1a;控制系统的稳定性 在自动控制领域&#xff0c;控制系统的稳定性是一个至关重要的问题。稳定性决定了系统在受到扰动后是否能够恢复到平衡状态。本文将介绍控制系统稳定性的基本概念、如何利用特征值分析稳定性&#xff0c;并通过具体示例和Python代码展示…

【洛谷B3643】图的存储 解题报告

洛谷B3643 - 图的存储 题目描述 给定一个 n n n 个顶点 m m m 条边的无向图。请以邻接矩阵和邻接表的形式输出这一张图。 输入格式 第一行输入两个正整数 n n n 和 m m m&#xff0c;表示图的顶点数和边数。 第二行开始&#xff0c;往后 m m m 行&#xff0c;每行输入…

Docker中布置Jenkins实现Android项目的自动化构建

因项目需要&#xff0c;要在服务器上使用Jenkins完成Android项目的自动化构建&#xff0c;但服务器上登录的账户没有管理员权限&#xff0c;无法用sudo命令&#xff0c;因此需要把相应环境布置在docker中。 环境搭建 docker容器相关命令 创建容器 docker create -it contai…

【Python】解决Python报错:AttributeError: ‘function‘ object has no attribute ‘xxx‘

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

未来已来, AI将作为超级工具?

人工智能时代已来 1.AI将作为超级工具&#xff1a;AI是推动全产业数字化转型的高效工具&#xff0c;机遇比互联网时代大10倍&#xff0c;但只有1/3的机会留给初创企业。 2.硅谷AI市场分类中&#xff0c;特别看好开源平台&#xff0c;其将为初创企业和大企业提供更多选择。 3.…

C# 字节数组(byte[])拼接的性能对比测试

将C#中的三种字节数组拼接方式的性能做了一个对比测试&#xff0c;DEMO程序代码如下&#xff1a; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Byte数组拼接测…

使用 DuckDuckGo API 实现多种搜索功能

在日常生活中&#xff0c;我经常使用搜索引擎来查找信息&#xff0c;如谷歌和百度。然而&#xff0c;当我想通过 API 来实现这一功能时&#xff0c;会发现这些搜索引擎并没有提供足够的免费 API 服务。如果有这样的免费 API, 就能定时获取“关注实体”的相关内容&#xff0c;并…

Gbase 国产数据库

参考&#xff1a;参考&#xff1a; 5分钟学会Linux环境GBase 8t安装和部署 - 光洋山 - twt企业IT交流平台 (talkwithtrend.com)https://www.talkwithtrend.com/Article/197237 视频 GBase 8s快速入门-功能简介与演示-大数据教程-腾讯课堂 (qq.com)https://ke.qq.com/course/…

ADB日常使用命令

【ADB全称 Android Debug Bridge】 是Android SDK中的一个命令行工具adb命令可以直接操作管理Android模拟器或真实的Android设备&#xff08;手机&#xff09; 建立PC和模拟器连接 # 建立连接 adb connect 127.0.1: 模拟器端口号〈逍遥模拟器21503〉 # 验证是否连接成功 adb d…

整数乘除法练习题

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<Windows.h>void show1(); .//开始界面 int getchoice(); //选择界面 int dowork(int n); //随机做乘除法 int num(); //用户确定做题的数量 v…

OrangePi AIpro 变身 Android 打包机

主板基本信息介绍 OrangePi AIpro&#xff0c;是香橙派联合华为精心打造&#xff0c;建设人工智能新生态而设计的一款开发板&#xff0c;这次为大家分享下我上手的这款 OrangePi AIpro 8GB&#xff08;算力达8TOPS&#xff09; 的一些小小的经验。 基本参数如下&#xff1a; …

首创十八道工艺,口味王引领槟榔产业高质量发展

说到槟榔&#xff0c;相信大伙都不会陌生&#xff0c;槟榔的历史可以追溯到汉代&#xff0c;不少文献有过记载&#xff0c;如汉代的沈约著的《咏竹槟榔盘》中提到“荐羞虽百品&#xff0c;所贵浮天实”&#xff1b;唐朝“诗仙”李白更是写道“何时黄金盘&#xff0c;一斛荐槟榔…

分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法

不废话&#xff0c;直接上正文。_ 方法一 思路&#xff1a;利用 BodyReader 直接读取 HttpContext 的 Request Body&#xff0c;再反序列化 var reqStream context.Request.BodyReader.AsStream(); var jsonObj JsonSerializer.Deserialize<CheckAndParsingMiddlewareM…

buuctf的RSA(五)

[RoarCTF2019]RSA 一看到题目&#xff0c;我就有些蒙了&#xff0c;A是代表了什么&#xff0c; 先来分解n 接下来可以暴力破解e了&#xff0c;因为e没有给出来&#xff0c;应该不会太大&#xff0c;猜测是四位数字 import gmpy2 import libnum from Crypto.Util.number import…

网卡配置基础知识

1、网络设置方式 首先科普下Virtual Box虚拟机的几种主流的网络设置方式&#xff0c;官方文档&#xff1a; 2解释 Host-only&#xff1a;仅主机模式 虚拟机和宿主机、虚拟机之间能互通&#xff0c;但是不能访问外网&#xff0c;虚拟机和宿主机同网段的其他主机不能互通这种…

数据结构---栈队列

栈和队列是我们数据结构中经常使用的数据结构&#xff0c;所以现在来了解一下栈和队列。 栈 特点&#xff1a; 栈是一种特殊的线性表&#xff0c;其中进行数据插入和弹出的部分叫做栈顶&#xff0c;另一端叫做栈底。 只允许数据从栈顶压入&#xff0c;从栈顶弹出即先进后出的…

最佳实践:REST API 的 HTTP 请求参数

HTTP 请求中的请求参数解释 当客户端发起 HTTP 请求 时&#xff0c;它们可以在 URL 末尾添加请求参数&#xff08;也叫查询参数或 URL 参数&#xff09;来传递数据。这些参数以键值对的形式出现在 URL 中&#xff0c;方便浏览和操作。 请求参数示例 以下是一些带有请求参数的…

JS-Lodash工具库

文档&#xff1a;Lodash Documentation orderBy函数&#xff1a;根据条件进行排序 注&#xff1a;第一个是要排序的数组&#xff0c;第二个是根据什么字段进行排序&#xff0c;第三个是排序的方式&#xff08;desc倒序&#xff09; 安装方式&#xff1a;Lodash npm i lodash…