【闲来看源码】分析一下`ArrayUtils.contains()`这个方法的实现

news2024/11/15 21:53:09

【闲来看源码】分析一下ArrayUtils.contains()这个方法的实现

在这里插入图片描述

大家先来看源码

    @PreAuthorize("@ss.hasPermi('system:user:remove')")
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{userIds}")
    public AjaxResult remove(@PathVariable Long[] userIds)
    {
        if (ArrayUtils.contains(userIds, getUserId()))
        {
            return error("当前用户不能删除");
        }
        return toAjax(userService.deleteUserByIds(userIds));
    }

这是一段源码,很简单,大家一看就懂!闲来无事看源码,我就好奇ArrayUtils.contains(userIds, getUserId())这里是怎么实现的?

我有两个好奇的地方:

  1. 不会也是使用遍历对比的吧?
  2. 会不会有些高级的写法?

我很好奇,我们一起看看吧——

进入方法内部,是这个样子:

    public static boolean contains(Object[] array, Object objectToFind) {
        return indexOf(array, objectToFind) != -1;
    }

看来这个方法是传入目标数组和目标对象,然后调用内部的indexOf()方法进行对比的,那就看看呗

我们再进入

   public static int indexOf(Object[] array, Object objectToFind) {
        return indexOf(array, objectToFind, 0);
    }

可以看到哈,这个有对于indexOf()方法实现了重载,多加了一个参数,也就是最后这个参数,我们再进,看看加的参数是什么参数

public static int indexOf(Object[] array, Object objectToFind, int startIndex) {
    if (array == null) {
        return -1;
    } else {
        if (startIndex < 0) {
            startIndex = 0;
        }

        int i;
        if (objectToFind == null) {
            for(i = startIndex; i < array.length; ++i) {
                if (array[i] == null) {
                    return i;
                }
            }
        } else {
            for(i = startIndex; i < array.length; ++i) {
                if (objectToFind.equals(array[i])) {
                    return i;
                }
            }
        }

        return -1;
    }
}

看来终于看到了庐山真面目,现在我们就对于这段代码进行一个彻彻底底的分析,其实也简单,我就是多说点:

这段代码是 indexOf 方法的另一种重载,用于查找对象数组中特定对象的索引。以下是对代码的分析:

  1. 方法签名:public static int indexOf(Object[] array, Object objectToFind, int startIndex)

    • 返回类型:int,表示要查找的对象在数组中的索引位置,如果未找到则返回 -1。
    • 参数:
      • array:要搜索的对象数组。
      • objectToFind:要查找的对象。
      • startIndex:搜索的起始索引位置。
  2. 首先,代码检查输入数组 array 是否为 null,如果是则返回 -1。

  3. 然后,检查起始索引 startIndex 是否小于 0,如果是则将其设置为 0。

  4. 接下来,使用循环从起始索引开始遍历数组。根据 objectToFind 是否为 null,分别执行不同的比较:

    • 如果 objectToFind 为 null,使用 == 运算符检查数组中的元素是否也为 null。
    • 如果 objectToFind 不为 null,使用 equals 方法检查数组中的元素是否与 objectToFind 相等。
  5. 如果找到匹配的元素,返回该元素的索引值。

  6. 如果整个数组都被遍历但未找到匹配的元素,返回 -1。

这个方法的设计使得它可以用于查找对象数组中的特定对象,提供了灵活性,同时处理了可能的 null 值情况。

好啦,一切尽在不言中,感谢大家观看,懂的都懂!

伟大的生命,不论以何种形式,将会在宇宙间永存。我们这个小小星球上的人类,也将继续繁衍和发展,直至遥远的未来。可是,生命对于我们来说又多么短暂。不论是谁,总有一天,都将会走向自己的终点。死亡,这是伟人和凡人共有的最后归宿。热情的诗人高唱生命的恋歌,而冷静的哲学家却说:死亡是自然法则的胜利…… 是的,如果一个人是按自然法则寿终正寝,就生命而言,死者没有什么遗憾,活着的人也不必过分地伤痛。————路遥《平凡的世界》

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

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

相关文章

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来&#xff0c;算子的 sub-task 需要处理的数据量 > 能够处理的数据量&#xff0c;比如&#xff1a; 当前某个 sub-task 只能处理 1w qps 的数据&#xff0c;但实际上到来 2w qps 的数据&#xff0c;但是实际只能处理 1w 条&#…

制作离线版element ui文档

链接&#xff1a;https://pan.baidu.com/s/1k5bsCK9WUlZobhFBLItw1g?pwdgeyk 提取码&#xff1a;geyk --来自百度网盘超级会员V4的分享 https://github.com/ElemeFE/element 克隆官方代码 使用nvm切换node版本&#xff0c;推荐使用14.0.0 http://doc.xutongbao.top/doc/#/zh…

田忌赛马 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给定两个只包含数字的数组a,b,调整数组a里面数字的顺序&#xff0c;使得尽可能多的a[i] > b[i]。 数组a和b中的数字各不相同。输出所有可以达到最优结果的a数…

Mac M1使用PD虚拟机运行win10弹出“内部版本已过期立即安装新的windows内部版本”

一、问题 内部版本已过期立即安装新的windows内部版本 二、解决 1、如图所示打开zh-CN目录 C:\windows\system32\zh-CN找到licensingui.exe文件 将该文件重命名为licensingui_bak.exe 2、修改完成效果如下 &#xff08;1&#xff09;但操作中发现&#xff0c;需要TrustedIns…

使用阿里云一键部署 幻兽帕鲁服务器 菜鸟教程 一键快速部署

本文通过介绍如何 从购买阿里云服务器&#xff08;windows系统&#xff09;、到一键傻瓜式快速部署、再到连接到帕鲁服务器&#xff0c;简介明了&#xff0c;易上手&#xff0c;没相关专业知识的游戏玩家也能一键傻瓜式搭建服务器环境。 背景&#xff1a;最近很火爆的游戏《幻…

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-任务管理

目录 一、任务管理1.1、任务状态1.2、任务基本概念1.3、任务管理使用说明1.4、任务开发流程1.5、任务管理接口 一、任务管理 从系统角度看&#xff0c;任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 O…

设计模式巡礼:多板适配案例解析与深度重构

theme: cyanosis 月黑风高&#xff0c;好兄弟发给我一个重构需求&#xff0c;咨询我的意见。 一、 场景分析 开发的产品是需要运行到不同的定制Android板子&#xff0c;不同板子有对应的不同SDK提供的API&#xff0c;目前的业务端&#xff0c;业务流程基本是确定的&#xff0…

LLM大语言模型(六):RAG模式下基于PostgreSQL pgvector插件实现vector向量相似性检索

目录 HightLightMac上安装PostgreSQLDBever图形界面管理端创建DB 使用向量检索vector相似度计算近似近邻索引HNSW近似近邻索引示例 HightLight 使用PostgreSQL来存储和检索vector&#xff0c;在数据规模非庞大的情况下&#xff0c;简单高效。 可以和在线业务共用一套DB&#…

国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理

参考代码 /************************************************************************************************** * file usart_async_tx_no_int_rx_rxneint.c * brief 异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将 * …

使用yolo训练自己的模型

YOLO&#xff08;You Only Look Once&#xff09;是一种用于目标检测的深度学习模型&#xff0c;旨在实时检测图像或视频中的多个对象。与传统的目标检测方法不同&#xff0c;YOLO一次性处理整个图像&#xff0c;而不是通过滑动窗口或区域提议进行多次检测。这种方法使得YOLO在…

2023年全国职业院校技能大赛软件测试赛题第3套

2023年全国职业院校技能大赛 软件测试赛题第3套 赛项名称&#xff1a; 软件测试 英文名称&#xff1a; Software Testing 赛项编号&#xff1a; GZ034 归属产业&#xff1a; 电子与信息大类 …

微信小程序新手入门教程四:样式设计

WXSS (WeiXin Style Sheets)是一套样式语言&#xff0c;用于描述 WXML 的组件样式&#xff0c;决定了 WXML 的组件会怎么显示。 WXSS 具有 CSS 大部分特性&#xff0c;同时为了更适合开发微信小程序&#xff0c;WXSS 对 CSS 进行了扩充以及修改。与 CSS 相比&#xff0c;WXSS …

GPT帮别人画,就是不帮我画,我很急怎么办?

今天分享如何让GPT更听话&#xff0c;分享来自林杰陪伴群中的群友“友人”&#xff0c;分享的非常棒&#xff0c;是AI绘画中的高手&#xff01; AI也需要奖励 虽然说AI距离完全的自主思考还有很长很长的路要走&#xff0c;但是各种实验表明&#xff0c;当我们在与AI对话时&am…

ABAP 标准状态栏GUI STATUS的快速创建

ABAP 标准状态栏GUI STATUS的快速创建 不用先创建GUI 状态 SE41

【PyQt】06-.ui文件转.py文件

文章目录 前言方法一、基本脚本查看自己的uic安装目录 方法二、添加到扩展工具里面&#xff08;失败了&#xff09;方法二的成功步骤总结 前言 方法一、基本脚本 将Qt Designer&#xff08;一种图形用户界面设计工具&#xff09;生成的.ui文件转换为Python代码的脚本。 pytho…

国考省考行测:平行结构体

国考省考行测&#xff1a;平行结构体 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点 遇…

Linux命令:du命令和sort命令

目录 1 du命令1.1 du命令说明## 1.2 实例-a&#xff1a;显示当前目录下所有文件和目录-s&#xff1a;显示当前目录下所有文件和目录总大小--max-depth&#xff1a;显示当前目录&#xff0c;目录深度为1的&#xff0c;所有目录的总大小-k&#xff1a;输出内容以 kb 单位显示磁盘…

算法:构成的正方形数量

一、算法描述 输入 N 个互不相同的二维整数坐标, 求这 N 个坐标可以构成的正方形数量。(内积为零的两个向量垂直) 第一行输入为 N&#xff0c;N 代表坐标数量&#xff0c;N为正整数。N < 100 之后的 K 行输入为坐标 x y以空格分隔&#xff0c;x, y 为整数, -10 < x,y <…

Jedis和SpringDataRedis快速入门

Jedis快速入门 Jedis连接池 SpringDataRedis快速入门 序列化 引入SpringMVC就不用再引入这个依赖

华为配置交换机KPI信息上报分析器示例组网图形

配置交换机KPI信息上报分析器示例 组网图形 图1 KPI信息上报拓扑图 组网需求操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业网络用一台华为公司iMaster NCE-CampusInsight作为分析器对交换机设备进行智能运维管理。iMaster NCE-CampusInsight与交换机之间已经实现路由…