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