Commons项目理解
在java项目中有很多公用的算法实现和工具类
jarkata项目组把这些公用的东西作为开源项目加以实现
以后在项目使用中就可以统一算法,不必写象StringUtil或者DateHelper之类的工具类了
很多算法也不必再查文档,熬夜写个通宵了,:)
最近需要针对collection作一些扩展,自己写了半天,才发现commons-collection里面已经有了实现
而且比自己写的好更完善,效率更高
索性来研究一下这个项目,因为很多开源项目也使用它
以后看开源项目代码的时候也就不用那么费力了
概述
首先这个包是基于JDK1.2开发的,所以以后在调用的时候就不用关心JDK版本的问题
其二这个包在大部分的开源项目中使用,已经成为事实上的行业集合类处理标准
特性描述
Bag集合接口,用于在集合中保存一个对象的多次拷贝
Buffer接口,用于处理FIFO等定义好移除顺序的结合类
BidiMap接口,用于通过value查找key
MapIterator,这个就不用多说了,以后就不用使用map.keyset.iterator去处理map循环了
型别检查装饰,其实就是可以创建一个具有指定型别的集合类
比如定义了一个整型的list,就不能再向这个list里面放String,否则会抛出异常
转换修饰,就是在向集合中放入对象时,可以将对象转换为需要的类型的对象再放入集合中
组合集合,一个非常好的概念,就是把多个集合当一个集合去使用
排序Map和Set,保持集合的加入顺序
Identity Map,这个Map中使用==而不是equal()方法去比较对象
* Reference map that allows keys and/or values to be garbage collected under close control
更多的比较实现
更多的迭代实现
将数组或枚举类型装换到集合类中,非常好用的功能,毕竟array的功能有限
* Utilities to test or create typical set-theory properties of collections such as union, intersection, and closure
个人对于一些类的体会
第一个就是TypedList(还有map,set都一样)
可以创建一个String的List,或者一个只能放入指定Class的List,避免编程时候的误写
java编程思想中提到过创建指定型别的集合的问题,不过使用这个类就不用那么麻烦了
CollectionUtils
针对集合进行与/并/判断是否包含/等于等工具方法
查找一个集合中某个对象出现的数量
查找(或过滤)一个集合中某种class的子集合,或者计算数量
将集合中的对象进行转换处理
将数组或枚举对象放入集合中
提供针对所有集合类的index,size,get等方法
提供数组翻转方法
提供集合的同步修饰
比如HashMap本身是不支持同步的,但这个类提供了一个同步修饰
以后再使用经过修饰后的HashMap时就不用考虑同步的问题了
提供禁止修改集合的工具方法
同CollectionUtils一样还有相应的ListUtils,SetUtils等工具类
这些工具类提供的方法基本都出现在CollectionUtils中
ArrayStack
一个继承自ArrayList的Stack实现
BeanMap
一个用于分析javaBean的Map容器,个人感觉用于测试比较方便
因为beanUtils类也可以做这个类的事情,这个类方便的是读取所有属性并显示
BidiMap
就是一个可以通过value查找key的Map
限制:添加对象时,value不能相同
因为这个类还有一个方法就是创建一个反向Map,把value作为key,把key作为value再创建一个Map
BoundedCollection接口
所有实现此接口的集合均被限制了集合大小,不过超过约束的大小
Buffer接口
非常好的一个接口,实现了按照指定顺序移除对象
可以用来实现FIFO,LIFO等算法
也可以通过Comprator来构造,指定确定的移除算法
Ordered**接口
用来实现集合排序
Predicate接口(断言)
用来验证或过滤对象
Transformer接口
用来把一个对象转换成另为一个对象
Closure接口
用来封闭一段代码,针对对象进行指定的处理
Unmodifiable接口
所以实现(或包含了)此接口的对象均不可以改变
ComparatorUtils类
实现了各种比较
布尔值比较实现
null判断比较
比较链的实现
获取min,max对象
AbstractDualBidiMap
一个包含了两个bidiMap的抽象类
因为bidiMap可以做双向查找
继承AbstractDualBidiMap后,内部的两个map一个针对key排序,一个针对value排序
可以加快访问速度
EnumerationUtils
包含了toList()方法,可以简化代码
ExtendedProperties 比较好玩
提供了增强的properties处理
处理多行
处理多个相同的声明
Fast***
提供了在多线程中针对集合的快速访问
当进行只读操作时,不进行同步处理
当进行写操作时
克隆整个集合
针对克隆执行修改
使用克隆替换现有对象
MultiHashMap
实现了多key的map
当get时返回list对象
StaticBucketMap ***********(高效)
是一个非常高效的Map, get, put, remove 和 containsKey 操作都被进行了优化
这个Map里面有多个Buck(桶)用于存储数据
这样在多线程中取数据的使用,是从不同的桶中取,真正实现了同步机制
当然,在进行批量操作时无法保证原子性,要注意这一点