- 大胆采用开源工具
在选择开源工具和框架时要遵循一定的原则:
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”式的解决方法,可以大大缩减代码的数量,而且也不会导致代码的可读性降低。