常用项目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(桶)用于存储数据
??????????????? 这样在多线程中取数据的使用,是从不同的桶中取,真正实现了同步机制
??????????????? 当然,在进行批量操作时无法保证原子性,要注意这一点
?
?在源代码中英文信息如下:
?* <p>FastDateFormat is a fast and thread-safe version of
?* {@link java.text.SimpleDateFormat}.</p>
?*
?* <p>This class can be used as a direct replacement to
?* <code>SimpleDateFormat</code> in most formatting situations.
?* This class is especially useful in multi-threaded server environments.
?* <code>SimpleDateFormat</code> is not thread-safe in any JDK version,
?* nor will it be as Sun have closed the bug/RFE.
?* </p>
?
翻译信息大致内容如下:
?
在时间转换时一般使用的为:DateFormat或SimpleDateFormat实现字符串时间的转换。
? 可以采用common-lang包中的 org.apache.commons.lang.time.FastDateFormat类
? FastDateFormat是一个快速高效,并且线程安全的转换对象,可以直接替换SimpleDateFormat类。
?特别是在多线程的情况下,推荐使用FastDateFormat类(SimpleDateFormat非线程安全性)。
?
common-lang中FastDateFormat的使用如下:
?public static final FastDateFormat FAST_SECOND_FORMATETR = FastDateFormat
???.getInstance("yyyy-MM-dd HH:mm:ss");
?
?/* 格式化日期为短形式 */
?public static String getShortDate(Date myDate) {
??return FAST_SHORT_FORMATETR.format(myDate);
?}
?
?
?/* 格式化日期为标准形式 */
?public static String formatDateTime(Date myDate, String pattern) {
??FastDateFormat format = FastDateFormat.getInstance(pattern);
??return format.format(myDate);
?}
?
在Common-lang中的DateUtils类的使用
?
?/**
? * 返回date时间 只到天 2008-05-20 00:00
? *
? * @param date
? * @return
? */
?public static Date getNoHHMMDate(Date date) {
??return org.apache.commons.lang.time.DateUtils.truncate(date,
????Calendar.DATE);
?}
?/**
? * 增加天
? *
? * @param date
? * @param i
? * @return
? */
?public static Date addDays(Date date, int i) {
??return org.apache.commons.lang.time.DateUtils.addDays(date, i);
?}
?
?
常用的common-lang中的StringUtils,NumberUtils等。
?
?
?
?
?
?