JAVA学习日记(十三)常用算法API+Lambda表达式

news2024/11/14 12:04:15

一、Arrays

操作数组的工具类

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args){

        int[] arr=new int[]{1,2,3,4,5,6,7,8,9};
        //将数组变为字符串 toString
        System.out.println(Arrays.toString(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
        //二分法查询元素 binarySearch
        //若元素存在则返回索引值,若不存在则返回 -插入点-1 (为了避免0时 -0 和 +0一样,导致错误
        System.out.println(Arrays.binarySearch(arr,2)); //返回索引值 1
        System.out.println(Arrays.binarySearch(arr,0)); //返回-插入点-1  : -1
        System.out.println(Arrays.binarySearch(arr,10)); //返回-插入点-1  : -10
        //拷贝数组 copyOf
        //参数一:老数组  参数二:新数组的长度
        //会根据第二个参数来创建一个新的数组:若新数组比老数组长度小,则会部分拷贝,若一致则完全拷贝,若长则会完全拷贝后补上默认值。
        int[] arr1=Arrays.copyOf(arr,9);
        System.out.println(Arrays.toString(arr1));
        //指定范围拷贝数组 copyOfRange  包头不包尾,包左不包右
        //参数一:老数组  参数二:起始索引   参数三:结束索引(不包含)
        int[] arr2=Arrays.copyOfRange(arr,0,5);
        System.out.println(Arrays.toString(arr2)); //[1, 2, 3, 4, 5] 不包括索引为5的元素
        //填充数组  fill
        int[] arr3=new int[5];
        Arrays.fill(arr3,100);
        System.out.println(Arrays.toString(arr3)); //[100, 100, 100, 100, 100]
        //排序 Sort
        //情况一:默认情况下给数组进行升序排序,底层使用快速排序
        int[] arr4=new int[]{5,8,2,3,4,8,1,6,10};
        Arrays.sort(arr4);
        System.out.println(Arrays.toString(arr4)); //[1, 2, 3, 4, 5, 6, 8, 8, 10]
        //情况二: 指定排序规则
        //参数一:要排序的数组   参数二:要排序的规则
        //只能给引用数据类型的数组进行排序
        //如果数组是基本数据类型的,需要变成对应的封装类

        //参数二的规则是一个接口类型,因此在调用方法时,需要用一个该接口的实现类对象,作为排序的规则。
        //这个实现类只需要使用一次,因此可以直接使用匿名内部类的方式

        //底层原理:插入排序+二分查找的方式进行排序
        //默认把0索引的数据当成是有序序列,0索引到最后都是无序序列
        //遍历无序序列得到里面的每一个元素,假设为A,将A插入有序序列,插入时通过二分查找确定A的插入点
        //通过Compare函数将A与插入点元素进行比较,若返回值为正数或者0,则将A继续与后面的元素进行比较。
        //若返回值为负数,将A与前面的元素进行比较。直到确定A的最终插入位置。
        //Compare函数 参数一:无序序列中遍历得到的每一个元素   参数二:有序序列中的元素
        //返回值: 负数——表示当前要插入的元素小于拿来比较的元素,需要放在元素前面
        //       0/正数——表示当前要插入的元素大于等于拿来比较的元素,需要放在元素后面
        // o1-o2 升序排列  o2-o1 降序排列
        Integer[] arr5=new Integer[]{10,5,6,8,1,2,7,3,5,4,9};
        Arrays.sort(arr5, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println();
                System.out.println("o1: "+o1);
                System.out.println("o2: "+o2);
                return o1-o2;
            }
        });
        System.out.println(Arrays.toString(arr5));   //[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10]
    }

二、Lambda表达式

产生于jdk8

面向对象:先找对象,让对象做事情

 标准格式:

()对应方法的形参

   ->  固定格式

  { } 对应方法的方法体

注意:

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

②Lmabda表达式只能简化函数式接口的匿名内部类方法

③函数式接口: 有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加上                                                  @FunctionalInterface注解

例:

public interface Swim {
    public abstract void swimming();
}



public class Main {
    public static void main(String[] args){
        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("正在游泳");
            }
        });
        System.out.println("__________________");
        method(
                ()->{
            System.out.println("正在游泳");
        });
    }
    public static void method(Swim s){
        s.swimming();
    }
}

省略格式:

核心:可推导,可省略

①参数类型可以省略不写

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

③如果Lambda表达式的方法只有一行,大括号、分号、return可以省略不写,需要同时省略

import java.util.Arrays;
import java.util.Comparator;


public class Main {
    public static void main(String[] args){
        Integer[] arr=new Integer[]{1,2,1,5,8,6,1,2,4,2};

        //匿名内部类
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        System.out.println(Arrays.toString(arr));//[1, 1, 1, 2, 2, 2, 4, 5, 6, 8]
        System.out.println("____________________");

        //lambda完整格式
        Arrays.sort(arr,
                (Integer o1,Integer o2)->{
                     return o2-o1;
                });
        System.out.println(Arrays.toString(arr));//[8, 6, 5, 4, 2, 2, 2, 1, 1, 1]
        System.out.println("____________________");

        //省略写法
        Arrays.sort(arr, (o1,o2)-> o1-o2);
        System.out.println(Arrays.toString(arr));//[1, 1, 1, 2, 2, 2, 4, 5, 6, 8]
        System.out.println("____________________");

    }
}
import java.util.Arrays;
import java.util.Comparator;


public class Main {
    public static void main(String[] args){
        //按照字符串长度进行排序
        String[] arr=new String[]{"aa","aaa","a","aaaaa","aaaa"};
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });

        Arrays.sort(arr, (o1,o2)->o1.length()-o2.length());
        System.out.println(Arrays.toString(arr));
    }
}

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

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

相关文章

实现linux定时备份数据至群晖NAS

实现LINUX定期备份数据至NAS中 前置条件 linux群晖NAS 1.NAS准备工作 首先确保NAS系统已经处于配置成功的状态 在控制面板–>文件服务–>rsync下启用rsync服务 启用之后会生成一个NetBackup的文件夹 2.在linux系统中测试一下rsync的备份命令 rsync -av -e ssh /li…

redis用法(二)

文章目录 02-redis数据类型篇生产环境下的redis实况图 1.全局命令redis数据存储格式set设置k-v查看当前redis的key的数量危险命令&#xff0c;新手请在于超老师陪同下执行为什么危险&#xff1f;如何正确搜索redis的key 查看库下有多少个key查询redis库信息切换redis库查看key是…

STM32问题集

这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…

aspose如何获取PPT放映页“切换”的“持续时间”值

aspose如何获取PPT放映页“切换”的“持续时间”值 项目场景问题描述问题1&#xff1a;从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法问题2&#xff1a;aspose的依赖包中&#xff0c;所有的关键对象都进行了混淆处理 解决方案1、找到ppt切换的持续时间对应的混…

基于Python的药房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【Linux】常用命令(2.6万字汇总)

文章目录 Linux常用命令汇总1. 基础知识1.1. Linux系统命令行的含义1.2. 命令的组成 2. 基础知识2.1. 关闭系统2.2. 关闭重启2.3. 帮助命令&#xff08;help&#xff09;2.4. 命令说明书&#xff08;man&#xff09;2.5. 切换用户&#xff08;su&#xff09;2.6.历史指令 3.目录…

wps导出图片图片特别多怎么进行排序,并且全部进行统一的修改名称

问题展示 想实现的效果 根据顺序变成数字顺序&#xff0c;方便后期自己页面开发的渲染 先确保自己有node环境电脑安装了node再创建一个index.js文件这个文件放在你导出文件的内 js内容 const fs require(fs); const path require(path);// 设置文件夹路径 const folderPat…

Ubuntu 的 ROS2 操作系统turtlebot3环境搭建

引言 本文介绍如何在 Ubuntu 系统上为 TurtleBot3 配置 ROS2 环境&#xff0c;提供详细的操作步骤以便在 PC 端控制 TurtleBot3。 本文适用于 ROS2 Humble 的安装与配置&#xff0c;涵盖必要的依赖包和 Gazebo 仿真环境的设置&#xff0c;帮助用户避免在环境搭建过程中遇到的兼…

区块链技术在慈善捐赠中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在慈善捐赠中的应用 区块链技术在慈善捐赠中的应用 区块链技术在慈善捐赠中的应用 引言 区块链技术概述 定义与原理 发…

C++ | Leetcode C++题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; class Solution { public:int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 …

MySql-8.0.40安装详细教程

文章目录 原创下载安装包安装配置初始化MySQL数据库安装mysql服务并启动启动MySQL服务连接MySQL配置环境变量 原创 MySql-8.0.26安装详细教程&#xff08;保姆级&#xff09; 下载安装包 MySQL Community Downloads 直接到选择MySQL Community Server版本页面 MySQL Commun…

算法学习第一弹——C++基础

早上好啊&#xff0c;大佬们。来看看咱们这回学点啥&#xff0c;在前不久刚出完C语言写的PTA中L1的题目&#xff0c;想必大家都不过瘾&#xff0c;感觉那些题都不过如此&#xff0c;所以&#xff0c;为了我们能更好的去处理更难的题目&#xff0c;小白兔决定奋发图强&#xff0…

vue2 -- el-form组件动态增减表单项及表单项验证

需求 在数据录入场景(如订单信息录入)中,可根据实际情况(如商品种类增加)动态添加表单项(如商品相关信息)。包含必填项验证和数据格式验证(如邮箱、电话格式),防止错误数据提交。 效果 代码一 <template><div>

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

丹摩征文活动|CogVideoX-2b:从安装到上线,轻松搞定全过程!

CogVideoX-2b&#xff1a;从安装到上线&#xff0c;轻松搞定全过程&#xff01; CogVideoX简介 CogVideoX的推出标志着视频生成技术的一次重大突破。过去&#xff0c;如何在保持高效的同时提升视频质量一直是一个难题&#xff0c;但CogVideoX 通过其先进的3D变分自编码器&…

CocosCreator 构建透明背景应用(最新版!!!)

文章目录 透明原理补充设置截图以及代码step1: electron-js mian.jsstep2:ENABLE_TRANSPARENT_CANVASstep3:SOLID_COLOR Transparentstep:4 Build Web phonestep5:package electron-js & change body background-color 效果图补充 透明原理 使用Cocos creator 做桌面应用开…

【H2O2|全栈】JS案例章节(三)——轮播图实现

目录 前言 开篇语 准备工作 需求 HTML和CSS 注意事项 原生JS实现 变量设置 方法设置 自动轮播与轮播销毁 翻页按钮 li点击切换指定图片 JQuery实现 变量设置 方法设置 自动轮播与轮播销毁 翻页按钮 li点击切换指定图片 结束语 前言 开篇语 本系列为短章节…

Vivado+Vscode联合打造verilog环境

一、Vivado下载安装 详细参考我另一篇文章&#xff1a; Vivado2022.2下载安装_fpga vivado下载-CSDN博客https://blog.csdn.net/weixin_61081689/article/details/143460790?spm1001.2014.3001.5501 二、Vscode下载安装 详细参考我另一篇文章&#xff1a; VscodeAnacond…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

【软考】系统架构设计师-计算机系统基础(1):计算机硬件

知识点汇总 1、指令集 精简指令集RISC&#xff1a;寄存器&#xff0c;硬布线&#xff0c;效率高&#xff1b;复杂指令集CISC&#xff1a;微程序控制技术&#xff0c;效率低&#xff1b; 2、奇偶校验码&#xff1a;码距是2&#xff08;出错位校验位&#xff09;&#xff0c;只…