Commons項目理解
??????? 在java項目中有很多公用的算法實現(xiàn)和工具類
??????? jarkata項目組把這些公用的東西作為開源項目加以實現(xiàn)
??????? 以后在項目使用中就可以統(tǒng)一算法,不必寫象StringUtil或者DateHelper之類的工具類了
??????? 很多算法也不必再查文檔,熬夜寫個通宵了,:)
??????? 最近需要針對collection作一些擴展,自己寫了半天,才發(fā)現(xiàn)commons-collection里面已經(jīng)有了實現(xiàn)
??????? 而且比自己寫的好更完善,效率更高
??????? 索性來研究一下這個項目,因為很多開源項目也使用它
??????? 以后看開源項目代碼的時候也就不用那么費力了
???????
概述
??????? 首先這個包是基于JDK1.2開發(fā)的,所以以后在調(diào)用的時候就不用關(guān)心JDK版本的問題
??????? 其二這個包在大部分的開源項目中使用,已經(jīng)成為事實上的行業(yè)集合類處理標準
特性描述
??????? Bag集合接口,用于在集合中保存一個對象的多次拷貝
??????? Buffer接口,用于處理FIFO等定義好移除順序的結(jié)合類
??????? BidiMap接口,用于通過value查找key
??????? MapIterator,這個就不用多說了,以后就不用使用map.keyset.iterator去處理map循環(huán)了
??????? 型別檢查裝飾,其實就是可以創(chuàng)建一個具有指定型別的集合類
??????????????? 比如定義了一個整型的list,就不能再向這個list里面放String,否則會拋出異常
??????? 轉(zhuǎn)換修飾,就是在向集合中放入對象時,可以將對象轉(zhuǎn)換為需要的類型的對象再放入集合中
??????? 組合集合,一個非常好的概念,就是把多個集合當一個集合去使用
??????? 排序Map和Set,保持集合的加入順序
??????? Identity Map,這個Map中使用==而不是equal()方法去比較對象
??????? * Reference map that allows keys and/or values to be garbage collected under close control
??????? 更多的比較實現(xiàn)
??????? 更多的迭代實現(xiàn)
??????? 將數(shù)組或枚舉類型裝換到集合類中,非常好用的功能,畢竟array的功能有限
???????
??????? * Utilities to test or create typical set-theory properties of collections such as union, intersection, and closure
個人對于一些類的體會
??????? 第一個就是TypedList(還有map,set都一樣)
??????? 可以創(chuàng)建一個String的List,或者一個只能放入指定Class的List,避免編程時候的誤寫
??????? java編程思想中提到過創(chuàng)建指定型別的集合的問題,不過使用這個類就不用那么麻煩了
??????? CollectionUtils
??????????????? 針對集合進行與/并/判斷是否包含/等于等工具方法
??????????????? 查找一個集合中某個對象出現(xiàn)的數(shù)量
??????????????? 查找(或過濾)一個集合中某種class的子集合,或者計算數(shù)量
??????????????? 將集合中的對象進行轉(zhuǎn)換處理
??????????????? 將數(shù)組或枚舉對象放入集合中
??????????????? 提供針對所有集合類的index,size,get等方法
??????????????? 提供數(shù)組翻轉(zhuǎn)方法
??????????????? 提供集合的同步修飾
??????????????????????? 比如HashMap本身是不支持同步的,但這個類提供了一個同步修飾
??????????????????????? 以后再使用經(jīng)過修飾后的HashMap時就不用考慮同步的問題了
??????????????? 提供禁止修改集合的工具方法
??????? 同CollectionUtils一樣還有相應(yīng)的ListUtils,SetUtils等工具類
??????????????? 這些工具類提供的方法基本都出現(xiàn)在CollectionUtils中
??????? ArrayStack
??????????????? 一個繼承自ArrayList的Stack實現(xiàn)
??????? BeanMap
??????????????? 一個用于分析javaBean的Map容器,個人感覺用于測試比較方便
??????????????? 因為beanUtils類也可以做這個類的事情,這個類方便的是讀取所有屬性并顯示
??????? BidiMap
??????????????? 就是一個可以通過value查找key的Map
??????????????? 限制:添加對象時,value不能相同
??????????????? 因為這個類還有一個方法就是創(chuàng)建一個反向Map,把value作為key,把key作為value再創(chuàng)建一個Map
??????? BoundedCollection接口
??????????????? 所有實現(xiàn)此接口的集合均被限制了集合大小,不過超過約束的大小
??????? Buffer接口
??????????????? 非常好的一個接口,實現(xiàn)了按照指定順序移除對象
??????????????? 可以用來實現(xiàn)FIFO,LIFO等算法
??????????????? 也可以通過Comprator來構(gòu)造,指定確定的移除算法
??????? Ordered**接口
??????????????? 用來實現(xiàn)集合排序
??????? Predicate接口(斷言)
??????????????? 用來驗證或過濾對象
??????? Transformer接口
??????????????? 用來把一個對象轉(zhuǎn)換成另為一個對象
??????? Closure接口
??????????????? 用來封閉一段代碼,針對對象進行指定的處理
??????? Unmodifiable接口
??????????????? 所以實現(xiàn)(或包含了)此接口的對象均不可以改變
??????? ComparatorUtils類
??????????????? 實現(xiàn)了各種比較
??????????????? 布爾值比較實現(xiàn)
??????????????? null判斷比較
??????????????? 比較鏈的實現(xiàn)
??????????????? 獲取min,max對象
??????? AbstractDualBidiMap
??????????????? 一個包含了兩個bidiMap的抽象類
??????????????? 因為bidiMap可以做雙向查找
??????????????? 繼承AbstractDualBidiMap后,內(nèi)部的兩個map一個針對key排序,一個針對value排序
??????????????? 可以加快訪問速度
??????? EnumerationUtils
??????????????? 包含了toList()方法,可以簡化代碼
??????? ExtendedProperties 比較好玩
??????????????? 提供了增強的properties處理
??????????????? 處理多行
??????????????? 處理多個相同的聲明
??????? Fast***
??????????????? 提供了在多線程中針對集合的快速訪問
??????????????? 當進行只讀操作時,不進行同步處理
??????????????? 當進行寫操作時
??????????????????????? 克隆整個集合
??????????????????????? 針對克隆執(zhí)行修改
??????????????????????? 使用克隆替換現(xiàn)有對象
??????? MultiHashMap
??????????????? 實現(xiàn)了多key的map
??????????????? 當get時返回list對象
??????? StaticBucketMap ***********(高效)
??????????????? 是一個非常高效的Map, get, put, remove 和 containsKey? 操作都被進行了優(yōu)化
??????????????? 這個Map里面有多個Buck(桶)用于存儲數(shù)據(jù)
??????????????? 這樣在多線程中取數(shù)據(jù)的使用,是從不同的桶中取,真正實現(xiàn)了同步機制
??????????????? 當然,在進行批量操作時無法保證原子性,要注意這一點