2019独角兽企业重金招聘Python工程师标准>>>

引言

在日常代码使用中,我们经常遇到判断字符串为空,或者集合为空的操作。例如判断集合为空,我的第一反应是list.size() == 0,前几天利用sonarLint提供的代码建议,发现其实还有list.isEmpty()来判断,这种写法比size() == 0优雅许多,工具类的好处就是避免重复写出现错误,同时通过工具名称增加代码易读性,这引发我去总结一下Java还自带那些这些工具。

Object类

在业务中会遇到这种情况,从Map中去取值,然后和一个固定的值进行对比,来做业务。我们可能会想下面一样去做

String val = MapUtils.getString(map,key);
val.equals("abc");

以防val为null的时候,会出现NPE的问题,代码规范建议会这样写:

"abc".equals(val);

其实在Java7的时候,Java就提供了Object的工具类,字符串和Object类型可以通过下面的方法区比较:

Objects.equals(val1,val2);

当然这个方法本质上是val1.equals(val2),所以boolean型的true是不会等于String的"true"的。

Objects类的常用方法:

Objects.equals(ss1,ss2);//true  其实和 ss1.equals(ss2)是等价的,但是不适合集合类的 集合了对比可以用deepEquals
Objects.requireNonNull("运行时异常 NPE的内容"); // 感觉作用不大,我们对NPE是在代码中进行处理才合适
Objects.isNull(ss1);//判断对象为空 相反的是 nonNull
Objects.toString(ss1,"");//对象转字符串,还可以设置默认值
Objects.hashCode(ss1);//计算对象的哈希值

String类

最常用的是format函数了,通过占位符进行字符串的格式化,在拼接sql的时候非常好用,比如:

String sql = "select * from %s";
sql = String.format(sql,"T_Test");
System.out.println("sql=" + sql);//输出为sql=select * from T_Test

高级一点的应用是在有多个地方需要格式化的时候,可以通过$建立参数索引,比如:

sql = "select * from %1$s where %2$s and b=(select d from %1$s)";
sql = String.format(sql, "T_test1","b='1'");
System.out.println("sql=" + sql);//输出为 sql=select * from T_test1 where b='1' and b=(select d from T_test1)

当然format还有一些特殊的用法,可以读一下这篇博文:http://kgd1120.iteye.com/blog/1293633。

Arrays类

创建一个集合数组,然后进行初始化,可以通过构造函数进行初始化集合数组,如果Arrays工具类的话,可以使用它的asList的初始化方法,如下:

        List l1 = Arrays.asList("aa","bb","cc");//构建并初始化新的List集合List l2 = new ArrayList(){{add("aa");add("bb");add("cc");}};System.out.println("l1 = " + l1.toString());//l1 = [aa, bb, cc]System.out.println("l2 = " + l2.toString());//l2 = [aa, bb, cc]

初始化集合数组的效果大体一样,当然我们还有可以用guava工具的ImmutableList.of()去实现,这个留在另外一篇博客再讲。

二分查找binarySearch(),返回的是一个下标,相对于线性查找(indexOf、contains、find),底层是按照二叉树原理查找的,在使用二分查找的时候 一个首要的前提,数据集已经实现了升序排列,网上有人对线性查找和二分查找有过对比,在数组长度比较大的情况下,用二分查找效率才会高,在长度70以下,效率不如线性查找,使用方法如下:

        List l1 = Arrays.asList("aa","bb","cc");//构建一下新的List集合Arrays.sort(l1.toArray()); //在使用二分查找的时候 一个首要的前提,数据集已经实现了升序排列Arrays.binarySearch(l1.toArray(),"aa");

Collections类

转载于:https://my.oschina.net/u/3470849/blog/1784706

Java自带的常用工具相关推荐

  1. (转)JAVA 十六个常用工具类

    (转)JAVA 十六个常用工具类 一. org.apache.commons.io.IOUtils closeQuietly 关闭一个IO流.socket.或者selector且不抛出异常.通常放在f ...

  2. JAVA实现 PDF转换 常用工具类(html转PDF、PDF添加页码、PDF文件下载、PDF添加印章或者水印)

    JAVA实现 PDF转换 常用工具类(html转PDF.PDF添加页码.PDF文件下载.PDF添加印章或者水印)可直接使用 package com.bestvike.util; import com. ...

  3. java inputtools_Java后台开发常用工具类

    本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数据库连接.格式转换.文件操作.发送邮件等等.提高开发效率,欢迎收藏与转载. 数据库连接工具类 数据库连接工具类--仅仅获得连接对象 ...

  4. java 自带thread分析工具_java自带的jvm分析工具

    这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈. ...

  5. JVM之jdk自带的常用工具命令

    文章目录 1.jps :jdk中自带的工具 1.1.概念 1.2.jps -q :只输出进程 ID 1.3.jps -m :输出传入 main 方法的参数 1.4.jps -l :输出完全的包名,应用 ...

  6. java中操作时间的常用工具类

    在开发中经常会遇到操作时间类的业务,虽然代码部分并不算难,但为了今后查找和使用方便,现将常用的几种操作时间的工具类代码予以罗列,以便今后参考: 下面直接上代码,难度不大,诸位小伙伴可自行参考,酌情使用 ...

  7. java 生成随机md5_Java常用工具类(计算MD5,验证码随机生成,天数差值计算)

    写这个博文的目的是为了怕哪天自己的电脑崩溃了,以前写的那些代码就没了,所以将自己写的工具类贴出来,方便以后去使用,也避免自己反复去创造轮子, 也可以对这些方法进行简单修改来完成业务需求,这样就可以极大 ...

  8. Java程序员开发常用的工具

    Java开发人员的常用工具 java常用的开发工具.都说工欲善其事必先利其器,要想学好java这门语言,选择一款好用顺手的开发工具是必不可少的.另外面试java工作时开发工具的使用也是一个重要的考核点 ...

  9. 工具类系列---【金融常用工具类】

    工具类代码 import java.math.BigDecimal; import java.text.DecimalFormat;/*** 金融常用工具类*/ public class NumFor ...

最新文章

  1. python装什么版本-新手python用什么版本好?
  2. gridView里如何添加详情按钮,点击它可以转到另一页,以获取该行的详细信息。
  3. Make Them Equal 埃氏筛法(1200)
  4. 用计算机弹奏曲子童年,5.这首曲子使我想起了我的童年.十.书面表达现在.计算机游戏非常盛行.这是一件好事还是一件坏事?请你用英语写一篇短文来陈述自己的观点.并说明理由.字数:80-120....
  5. 【白皮书下载】2020中国社交零售白皮书-BCGx腾讯.pdf
  6. Spring MVC开启注解
  7. label标签 for属性
  8. 携程android app插件化
  9. 在线ppt转换pdf转换器
  10. 【操作系统】Nachos 多道程序设计
  11. 命令行启动MySQL数据库
  12. android 电视 竖屏 黑边 -平板,竖视频转换成横视频,要求画面满屏不变形及没有黑边(解决方案)...
  13. mysql索引失效的几种情况
  14. 斐波那契(黄金分割法)查找算法
  15. 大数据量点的地图展示,借助PostGIS实现动态点抽稀/聚合效果
  16. Prompt Engineering 入门(一)
  17. Docker 基础知识 - 使用绑定挂载(bind mounts)管理应用程序数据
  18. Linux内核的TCP源码入门(一)
  19. Struts2---tags标签
  20. [OS] ESXi安装和配置

热门文章

  1. ansible的模块使用
  2. java WebSocket实现一对一消息和广播消息Demo
  3. [转]Pass a ViewBag instance to a HiddenFor field in Razor
  4. 世界在音乐中得到了完整的再现和表达。
  5. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
  6. intellij idea maven dependency自动补全
  7. 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?
  8. 人生哲理名言六十六条
  9. .NET新手系列(八)
  10. Go 语言编程 — net/http — HTTP 客户端