java代码_阿里Java团队的的代码规范,学到很多

2023-11-05

一、迭代entrySet() 获取Map 的key 和value

当循环中只需要获取Map 的主键key时,迭代keySet() 是正确的;但是,当需要主键key 和取值value 时,迭代entrySet() 才是更高效的做法,其比先迭代keySet() 后再去通过get 取值性能更佳。

反例:

正例:

二、使用Collection.isEmpty() 检测空

使用Collection.size() 来检测是否为空在逻辑上没有问题,但是使用Collection.isEmpty() 使得代码更易读,并且可以获得更好的性能;除此之外,任何Collection.isEmpty() 实现的时间复杂度都是O(1) ,不需要多次循环遍历,但是某些通过Collection.size() 方法实现的时间复杂度可能是O(n)

反例:

正例:

三、初始化集合时尽量指定其大小

尽量在初始化时指定集合的大小,能有效减少集合的扩容次数,因为集合每次扩容的时间复杂度很可能时O(n),耗费时间和性能。

反例:

正例:

四、使用StringBuilder 拼接字符串

一般的字符串拼接在编译期Java 会对其进行优化,但是在循环中字符串的拼接Java 编译期无法执行优化,所以需要使用StringBuilder 进行替换。

反例:

正例:

五、若需频繁调用Collection.contains 方法则使用Set

在Java 集合类库中,List的contains 方法普遍时间复杂度为O(n),若代码中需要频繁调用contains 方法查找数据则先将集合list 转换成HashSet 实现,将O(n) 的时间复杂度将为O(1)。

反例:

正例:

六、使用静态代码块实现赋值静态成员变量

对于集合类型的静态成员变量,应该使用静态代码块赋值,而不是使用集合实现来赋值。

反例:

正例:

七、删除未使用的局部变量、方法参数、私有方法、字段和多余的括号。

九、工具类中屏蔽构造函数

工具类是一堆静态字段和函数的集合,其不应该被实例化;但是,Java 为每个没有明确定义构造函数的类添加了一个隐式公有构造函数,为了避免不必要的实例化,应该显式定义私有构造函数来屏蔽这个隐式公有构造函数。

反例:

正例:

十、删除多余的异常捕获并跑出

用catch 语句捕获异常后,若什么也不进行处理,就只是让异常重新抛出,这跟不捕获异常的效果一样,可以删除这块代码或添加别的处理。

反例:

正例:

十一、字符串转化使用String.valueOf(value) 代替 " " + value

把其它对象或类型转化为字符串时,使用String.valueOf(value) 比 ""+value 的效率更高。

反例:

正例:

十二、避免使用BigDecimal(double)

BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

反例:

正例:

十三、返回空数组和集合而非 null

若程序运行返回null,需要调用方强制检测null,否则就会抛出空指针异常;返回空数组或空集合,有效地避免了调用方因为未检测null 而抛出空指针异常的情况,还可以删除调用方检测null 的语句使代码更简洁。

反例:

正例:

十四、优先使用常量或确定值调用equals 方法

对象的equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals 方法。

反例:

正例:

十五、枚举的属性字段必须是私有且不可变

枚举通常被当做常量使用,如果枚举中存在公共属性字段或设置字段方法,那么这些枚举常量的属性很容易被修改;理想情况下,枚举中的属性字段是私有的,并在私有构造函数中赋值,没有对应的Setter 方法,最好加上final 修饰符。

反例:

正例:

十六、tring.split(String regex)部分关键字需要转译

使用字符串String 的plit 方法时,传入的分隔字符串是正则表达式,则部分关键字(比如 .[]()| 等)需要转义。

反例:

正例:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java代码_阿里Java团队的的代码规范,学到很多 的相关文章

  • OrCAD进行DRC时报错的解决办法(持续添加中~~)

    1 WARNING ORCAP 1829 Possible pin type conflict 报错原因 器件的引脚类型和直接连接的信号类型冲突了解决方法 此类警告可直接忽略 或按如下方法处理 1 单击出现警告的器件 右键选择 Edit P
  • Python编程小知识-1-省略号运用

    默默无闻的省略号很好用 在Python中 一切皆对象 省略号也不例外 在Python 3中你可以直接写来得到它 gt gt gt Ellipsis gt gt gt type
  • 复习C语言指针---数组指针

    复习C语言指针 第二章 数组指针 数组指针 复习C语言指针 第二章 数组指针 数组指针定义 数组指针和二维数组 数组指针和指针数组 总结 数组指针定义 数组指针 其本质是指针 是指向一整个数组的指针 一 这里 要说明指向数组的指针和指向一整
  • mysql fulltext_干货!从零开始学习MySQL

    关注我们吧 查看更多干货文章 视频 回复 数据 还有数据分析相关资料领取 每周更有免费直播课 有问题也可私信咨询小编哦 一 为什么要用全文索引 我们在用一个东西前 得知道为什么要用它 使用全文索引无非有以下原因 like查询太慢 json字
  • openwrt 作为旁路由教程,适用于小米主路由

    小米路由作为主路由 openwrt作为旁路由时 手机上无线会提示无法访问外网 这个是由于小米路由自身解析导致 参考了好几篇文章 自己也趟了几遍才设置好 openwrt旁路由设置 刷好固件的新 Openwrt 网关 一般默认的IP地址是192
  • React Ref 其实是这样的

    大家好 我是Mokou 好久没有冒泡了 最近一直在看研究算法和数据结构方面的东西 但是似乎很多前端不喜欢看这种东西 而且目前本人算法方面也很挫 就不献丑了 当然了 最近也开始研究React了 这篇文章主要是讲述 Ref 相关的内容 如有错误
  • linux驱动开发学习笔记八:配置内核必不可少的工具--menuconfig

    一 常见的几种配置工具介绍 在配置内核的时候会有很多配置方法 make menuconfig make xxx defconfig 直接修改 config 注意 其中menuconfig是一个图形化配置工具 在后面我们会着重介绍 xxx d
  • 这篇文章把数据讲透了(四):数据挖掘

    一 前言 上一期文章中 我们已经了解到 数据 是一个庞大的体系 如下图所示 并用了 洗菜 择菜 的例子 为大家讲解数据清洗的含义 而今天笔者主要给大家讲解当净菜备好后 如何对净菜进行加工烹饪 让它变成有价值 有意义的美味佳肴 即数据挖掘的过
  • 好用的DNS服务器及各自特点

    1 114 114 114 114 在国内是比较出名的解析服务 因为解析速度快 同时连接三网 移动 电信 联通 横跨服务器延迟也不高 也可以满足用户需求 2 123 125 81 6 现在有很多人用360软件也会随着使用360DNS服务器
  • 大数据处理需要用到的九种编程语言

    随着大数据的热潮不断升温 几乎各个领域都有洪水倾泻般的信息涌来 面对用户成千上万的浏览记录 记录行为数据 如果就单纯的Excel来进行数据处理是远远不能满足的 但如果只用一些操作软件来分析 而不怎么如何用逻辑数据来分析的话 那也只是简单的数
  • 软件工程经济学知识点总结

    软件工程经济学知识点总结 题型 选择 20分 判断 20分 计算 20分 综合 25分 论述 15分 绪论 工程经济性 生产性工程项目的直接目的是盈利 非生产性工程项目的直接目的虽不是经济性的 但建设和运行中也必须重视成本 一切工程都具有经
  • 从C++角度讲解C#Out和ref的区别

    本文不同于以往的文章 而是透过c 和c 两种语言来讲解out和ref的区别 在C 中 out和ref都是用来传递参数的关键字 它们的主要区别在于 ref ref参数表示对变量的引用 这意味着当您将参数传递给一个使用ref参数的方法时 方法可

随机推荐

  • 基于Simulink的开关电源仿真设计

    基于Simulink的开关电源仿真设计 由220V单相工频交流电转变为直流电进行输出 设计由MATLAB的Simulink工具箱进行仿真实现 设计思路 输入端为220V单相工频交流电 输出端为48V直流电 48V直流电源应用广泛 如干电池
  • 编程实现木马的ActiveX启动和注入IE的启动方式

    木马的启动方式有很多种 现在比较流行的就是注册为系统服务启动 只适合Windows 2000以上的系统 或者以驱动的方式启动 不过 最近以ActiveX方式启动又比较流行了 因为它适合Windows 9x或2000以上的机器 而且杀毒软件
  • 华为交换机查看端口相关信息常用命令

    华为交换机查看端口相关信息常用命令 1 显示接口的运行状态和相关信息 display interface Ethernet brief dis int br 2 查看接口的描述信息 display interface description
  • Java 继承 (超详细)

    目录 1 什么是继承 2 在何处使用继承 3 如何使用继承 4 理解继承 4 1 子类可以继承父类的所有资源吗 4 2访问修饰符protected 5 方法重写 5 1方法的重写或方法的覆盖 Overriding 5 2必须遵守的规则 1
  • canvas小练习之渐变粒子特效

  • 【Python生存分析库scikit-survival的安装及使用教程】

    Python生存分析库scikit survival的安装及使用教程 生存分析是指在人口统计学领域中 对于以某种特定因素为背景下出现某类事件的时间进行统计分析的一种方法 在Python中 scikit survival就是一个十分实用的生存
  • 一文详解 ChatGPT:背后的技术,数据,未来发展

    文章目录 一文详解 ChatGPT ChatGPT背后的技术 基于 Transformer 的预训练语言模型 提示学习与指令精调 思维链 Chain of Thought COT 基于人类反馈的强化学习 Reinforcement Lear
  • Doris系列15- 索引

    文章目录 一 索引概述 二 案例 参考 一 索引概述 目前Doris只支持bitmap 索引 BITMAP 索引仅在单列上创建 bitmap index 位图索引 是一种快速数据结构 能够加快查询速度 语法 index 创建和修改相关语法有
  • RT-Thread分析-日志系统-rt_kprintf分析

    目录 1 前言 2 rt kprintf 3 配置选项 4 console设备 4 1 设备声明 4 2 设备创建 4 3 获取 console device 5 分析rt kprintf 函数 6 rt kprintf重定向 1 前言 内
  • sqli-labs(38-41)

    0x01 原理 堆叠注入 顾名思义就是很多语句结合在一起进行注入 在sql语句中 以 标志着一条语句的结束 要实现堆叠注入就是用 连接多条语句进行注入 即我们可以结束一个语句后 构造下一个语句 而union select也是将两条语句结合在
  • install4j与exe4简介——Java应用程序打包工具

    对于已经完成的Java应用程序开 发项目 从商业化角度看 应该制作成安全稳定的安装程序包来保证产品的安全和企业的利益 现在市面上比较高效的商业化工具有 installshield installanywhere install4j等 ins
  • 2019~2020数字货币领域发展趋势报告

    一 数字货币的概述 1 什么是数字货币 对于数字货币 目前并没有准确的统一定义 根据百度百科资料显示 数字货币是电子货币形式的替代货币 数字金币和密码货币都属于数字货币 是一种不受管制的 数字化的货币 通常由开发者发行和管理 被特定虚拟社区
  • pytorch使用profiler对模型性能分析时报错

    源码 参考自 PyTorch模型性能分析 优化及部署 aliyun com def analysis from torch profiler import profile tensorboard trace handler import t
  • Java Instrument 功能使用及原理

    0 介绍 利用 java lang instrument 做动态 Instrumentation 是 Java SE 5 的新特性 它把 Java 的 instrument 功能从本地代码中解放出来 使之可以用 Java 代码的方式解决问题
  • 弹弹弹,弹走鱼尾纹的弹出菜单(vue)

    前言 上一篇面试的总结 大家看的还行 因为量很大 错误在所难免 希望大家发现错误了可以告诉我一声 我的邮箱是236490794 qq com 一个小前端的希望 言归正传 我们老样子直接先上效果图再开始今天的分享这个项目的github可以看一
  • mpvue,uni-app开发微信小程序遇到的坑,直接在组件上写样式失效

    1 问题 在组件上直接写样式在小程序中不生效 解决办法
  • 互联网摸鱼日报(2023-06-25)

    互联网摸鱼日报 2023 06 25 InfoQ 热门话题 PayPal开源JunoDB 支持3500亿次日请求的键值存储 博客园新闻 马斯克小扎公开约架 亿万富翁八角笼决斗 Meta发言人 不是玩笑 亚马逊云斥资1亿美元建AIGC中心 微
  • 分布式训练——集合通信及其通信原语

    分布式训练 集合通信及其通信原语 转自 分布式训练 第3篇 集合通信及其通信原语 作者 常平 1 概述 集合通信 Collective Communications 是一个进程组的所有进程都参与的全局通信操作 其最为基础的操作有 发送sen
  • EHCI控制器(3)——host模式数据传输模型

    3 host模式数据传输模型 3 1控制传输 3 1 1配置通道特性 3 1 2配置通道0 包数量 3 1 3配置通道0 PID 3 1 4配置DMA描述符 3 1 5更新DMA描述符地址 3 1 6清通道0中断状态 3 1 7使能通道0
  • java代码_阿里Java团队的的代码规范,学到很多

    一 迭代entrySet 获取Map 的key 和value 当循环中只需要获取Map 的主键key时 迭代keySet 是正确的 但是 当需要主键key 和取值value 时 迭代entrySet 才是更高效的做法 其比先迭代keySet