Java自带的常用工具

引言

    在日常代码使用中,我们经常遇到判断字符串为空,或者集合为空的操作。例如判断集合为空,我的第一反应是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类

猜你喜欢

转载自my.oschina.net/u/3470849/blog/1784706