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));//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]
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

绿色之国斯洛文尼亚的必游景点

斯洛文尼亚拥有多样化的景观&#xff0c;本身就是一个十分吸引人的地方。它是世界上第一个被宣布为绿色旅游目的地的国家。这里除了有优越特殊的自然特色外&#xff0c;还有被联合国教科文组织列为世界遗产的保护区&#xff0c;以及关于爱情、贵族、盐和地下神话的惊奇故事。 世…

ABB机器人碰撞检测灵敏度设置

机器人的碰撞灵敏度是指机器人对碰撞事件的识别和反应能力。碰撞灵敏度取决于机器人的感知和控制系统以及其硬件结构。控制系统则负责根据感知系统的反馈信息&#xff0c;对机器人进行相应的控制和调整&#xff0c;以减少或避免碰撞。控制系统可以根据碰撞的严重程度来判断机器…

8-异常与错误

8-异常与错误 1、简介2、异常处理2.1 抛出异常2.2 捕获异常2.3 匹配顺序 3、异常说明4、构造函数中的异常5、析构函数中的异常6、标准库异常 1、简介 在程序编码过程中难免会出现错误&#xff0c;主要有&#xff1a;语法错误、逻辑错误、功能错误等&#xff0c;当我们面对以上…

DAQmx Connect Terminals (VI) 信号路由作用及意义

DAQmx Connect Terminals是一个LabVIEW虚拟仪器&#xff08;VI&#xff09;&#xff0c;用于配置和连接数据采集系统中的物理终端或虚拟终端。这一功能在配置复杂的数据采集&#xff08;DAQ&#xff09;系统时非常重要&#xff0c;因为它允许用户在不改变硬件连接的情况下&…

景源畅信数字:抖音新手如何找好自己的发布领域?

在短视频的浪潮中&#xff0c;抖音以其独特的魅力吸引了众多用户。对于刚踏入这个平台的新手来说&#xff0c;找到适合自己的发布领域至关重要。那么&#xff0c;如何在这个充满竞争的平台上找到自己的定位呢?接下来&#xff0c;就让我们一起来探讨这个问题。 一、明确兴趣爱好…

活动选择问题(贪心法)

目录 问题概述 实例分析 代码实现 问题概述 实例分析 求解蓄栏保留问题。农场有n头牛,每头牛会有一个特定的时间区间[b,e]在蓄栏里挤牛奶,并且一个蓄栏里任何时刻只能有一头牛挤奶。现在农场主希望知道最少蓄栏能够满足上述要求,并给出每头牛被安排的方案。对于多种可行方案…

情感读本期刊万方收录综合期刊投稿

《情感读本》杂志是由国家新闻出版总署批准&#xff0c;湖北省新闻出版广电局主管&#xff0c;湖北省期刊协会主办的正规综合类期刊。《情感读本》是一本以推动和发展情感教育、素质教育、人文教育为己任&#xff0c;奉行“立足教育&#xff0c;服务社会”的办刊宗旨&#xff0…

ChatGPT产品创意,直接出概念图

直接问&#xff0c;“给我一个创意点子” AI7号 它推荐我做一个智能家居植物管理系统&#xff0c;嗯&#xff0c;很小众的样子。直接让它出一张概念图吧。 像模像样&#xff0c;一张图太单薄了&#xff0c;再来5张。 呃...做了4张&#xff0c;下面还有每张图的说明。 你觉得怎…

(奇幻森林)POLYGON - Enchanted Forest - Nature Biomes - 3D Environment Art by Synty

各种雄伟的树木,装饰着优雅简化的树叶,在头顶形成了一个天堂般的树冠,在苔藓覆盖的森林地面上投下了宁静的咒语。 每一项资产,从引人入胜的环境材料到平缓的波浪状山丘,都经过精心制作,将您带到魔法和自然融合的地方。POLYGON-魔法森林-自然生物技术为数字领域注入真正魔…

实战16:基于apriori关联挖掘FP-growth算法挖掘关联规则的手机销售分析-代码+数据

直接看视频演示: 基于apriori关联挖掘关联规则的手机销售分析与优化策略 直接看结果: 这是数据展示: 挖掘结果展示: 数据分析展示:

矩阵短视频:成都科成博通文化传媒公司

重塑内容生态与传播格局、在数字化时代&#xff0c;短视频以其独特的形式和高效的传播能力&#xff0c;迅速崛起并成为了社交媒体领域的明星。成都科成博通文化传媒公司​而“矩阵短视频”作为短视频领域的一种新兴策略&#xff0c;正以其独特的优势&#xff0c;逐渐重塑内容生…

【JAVASE】String 类常用方法

1、字符串构造 String类提供的构造方式很多&#xff0c;常用的有三种。 &#xff08;1&#xff09;使用常量串构造 例如&#xff1a; &#xff08;2&#xff09;直接new String对象 例如&#xff1a; &#xff08;3&#xff09;使用字符数组进行构造 例如&#xff1a; 2…

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…

Linux CFS调度器之周期性调度器scheduler_tick函数

文章目录 前言一、简介二、源码分析2.1 scheduler_tick2.2 task_tick2.3 entity_tick2.4 check_preempt_tick2.5 resched_curr 参考资料 前言 Linux内核调度器主要是主调度器和周期性调度器&#xff0c;主调度器请参考&#xff1a;Linux 进程调度之schdule主调度器 一、简介 …

如何在IDEA中实现类似Linux命令那样的外部传参

【背景说明】 IDEA中执行一个程序时&#xff0c;如何就在程序一开始执行给传入你给的参数呢&#xff1f; 【说明】 public static void main(String[] args) throws Exception {} 说明&#xff1a;其实java中main方法里的args这个参数&#xff0c;就是用于接收外部传参的。…

C# 写一个简单的Windows Service的服务程序

项目创建及设定部分 使用VS2019创建项目&#xff0c;选择C# Service的选项 按照你喜欢的方式命名&#xff0c;我这边就默认了 添加安装服务&#xff0c;在Service1.cs[Design]中 在设计界面右击&#xff0c;选择如下的"Add Installer" 在出现的"ProjectInstall…

Ubuntu server 24 (Linux) Snort3 3.2.1.0 Guardian IPtables 联动实战 主动防御系统(ids+ips)

一 Snort3 安装配置&#xff0c;参考:Ubuntu server 24 安装配置 snort3 3.2.1.0 网络入侵检测防御系统 配置注册规则集-CSDN博客 二 安装主动防御程序Guardian 1 下载&#xff0c;解压 tar zxvf guardian-1.7.tar.gz cd guardian-1.7/ 2 配置 #拷贝文件 sudo cp guard…

如何从浅入深理解transformer?

前言 在人工智能的浩瀚海洋中&#xff0c;大模型目前无疑是其中一颗璀璨的明星。从简单的图像识别到复杂的自然语言处理&#xff0c;大模型在各个领域都取得了令人瞩目的成就。而在这其中&#xff0c;Transformer模型更是成为大模型技术的核心。 一、大模型的行业发展现状如…

docker删除所有容器

笔记 要使用 Docker 删除所有容器&#xff08;无论是停止的还是正在运行的&#xff09;&#xff0c;可以按照以下步骤操作&#xff1a; 1. **删除所有正在运行的容器**&#xff1a; 首先&#xff0c;您需要停止所有正在运行的容器。可以使用以下命令&#xff1a; dock…