seaairland

 

Commons-collection

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(桶)用于存储数据
                这样在多线程中取数据的使用,是从不同的桶中取,真正实现了同步机制
                当然,在进行批量操作时无法保证原子性,要注意这一点

posted on 2006-05-04 12:15 chenhui 阅读(737) 评论(0)  编辑  收藏 所属分类: 好文收集Jakarta Commons


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

介绍 IOC

友情链接

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜