杂谈:大胆采用开源。

  • 大胆采用开源工具

        在选择开源工具和框架时要遵循一定的原则:

        1、普适性原则

        2、唯一性原则

        3、“大树纳凉”原则

        4、精而专原则

        5、高热度原则

  • 推荐使用Guava扩展工具包

        1、Collections

        不可变集合:包括ImmutableList、ImmutableMap、ImmutableSet、ImmutableSortedMap、ImmutableSortedSet等,他比不可修改集合(Unmodifiable Collections)更容易使用,效率更高,而且占用的内存更少。

        多值Map:多值Map比较简单,在JDK中,Map中的一个键对应一个值,在put一个键值对时,如果键重复了,则会覆盖原有的值,在大多数情况下这比较符合实际应用,但有的时候确实会存在一个键多个值的情况,比如我们的通讯录,一个人可能会对应两个或三个号码。

        Table表:在GIS(Geographic Information System,地理信息系统)中,我们经常会把一个地点标注在一个坐标上,比如把上海人民广场标注在北纬31.23、东经121.48的位置上,也就是说只要给出了准确的经度和维度就可以进行精确的定位——两个键决定一个值。

        集合工具类:Guava的集合工具类分得比较细,比如Lists、Maps、Sets分别对应的是List、Map、Set的工具类。

        2、字符串操作

        Guava提供了两个非常好的字符串操作工具:Joiner连接器和Splitter拆分其。

        3、基本类型工具

        基本类型工具在primitives包中,是以基本类型名+s的方式命名的,比如Ints是int的工具类,Doubles是double的工具类,注意这些都是针对基本类型的,而不是针对包装类型的。

  • Apache扩展包

        1、Lang

        字符串操作工具类:JDK提供了String类,也提供了一些基本的操作方法,但是要知道String类在项目中是应用最多的类,这也预示着JDK提供的String工具不足以满足开发需求,Lang包弥补了这个缺陷,他提供了诸如StringUtils(基本的String操作类)、StringEscapeUtils(String的转义工具)、RandomStringUtils(随机字符串工具)等非常实用的工具。

        Object工具类

        可变的基本类型:基本类型都有相应的包装类型,但是包装类不能参与加、减、乘、除运算,要运算还得转化为基本类型。

        其他Utils工具:日期处理方面的DateUtils和DateFormatUtils没有Joda强大。

        2、BeanTuils

        他是JavaBean的操作工具包,不仅可以实现属性的拷贝、转换等,还可以建立动态的Bean,甚至建立一些自由度非常高的Bean。

        属性拷贝

        动态Bean和自由Bean

        转换器

        3、Collections

        Collections工具包体哦那个了ListUtils、MapUtils等基本集合操作工具,比较常用而且较简单。

        Bag:Bag是Collections中的一种,他可以容纳重复元素,与List的最大不同点是他提供了重复元素的统计功能,比如一个盒子中有100个球,现在要计算出蓝色球的数量,使用Bag就很容易实现。

        lazy:有这样一句话“在我需要的时候,你再出现”,lazy系列的集合就是起这样的作用的,在集合中元素被访问时他才会生成。

        双向Map

        JDK中的Map要求键必须唯一,而双向Map(Bidirectory Map)则要求键、值都必须唯一,也就是键值是一一对应的,此类Map的好处就是既可以根据键进行操作,也可以反向根据值进行操作,比如删除、查询等。

        Apache commons还有很多非常好的工具,如DBCP、net、Math等,但是这些包有个缺点,大部分更新比较缓慢,有些扩展甚至可以说比较陈旧了,例如Collections中的大部分集合类不支持泛型。

  • 推荐使用Joda日期时间扩展包

        1、本地格式的日期时间

        2、日期计算

        3、时区时间

  • 可以选择多种Collections扩展

        1、fastutil

        主要提供两种功能:一种是限定键值类型(Type Specific)的Map、List、Set等。另一种是大容量的集合。

        2、Trove

        提供了一个快速、高效、低内存消耗的Collection集合,并且还提供了过滤和拦截的功能。

        3、lambdaj

        他不会提供任何的集合扩展,只会提供对集合的操作,比如查询、过滤、统一初始化等,特别是他的查询操作,非常类似于DBRMS上的SQL语句,而且也会提供诸如求和、求平均值等的方法。

        lambdaj算是一个比较年轻的开源工具,但是他符合开发人员的习惯,对集合的操作提供了“One Line”式的解决方法,可以大大缩减代码的数量,而且也不会导致代码的可读性降低。

你可能感兴趣的:(杂谈)