apache.commons.collections4用法
来源:互联网 发布:c语言 关键字 编辑:程序博客网 时间:2024/06/05 20:52
apache.commons.collections4用例
工具类:
每个主要的集合接口都有一个utility类。因此,set和sortedset接口的utility类就是setutils。这些utility类提供了操作集合类型的共通方法。
基本的方法都包含在两个根集合接口的utility类中,即collectionutils和maputils。因为所有的其他集合接口都集成collection或者map,所以collectionutils和maputils可以被扩展使用。共同的方法包括交集操作、计数操作、迭代操作、逻辑操作和类型强制转换操作等。同时,utility类还提供了对集合封装类的访问,这与jdk collections类的方式类似。
1. maps:
1.map迭代
jdk中的map接口很难进行迭代。api用户总是需要通过entryset或者keyset进行迭代。commons-collectons现在提供了一个新的接口—mapiterator来允许对maps进行简单的迭代。
IterableMap iterableMap = (IterableMap) new HashMap(); MapIterator it = iterableMap.mapIterator(); while(it.hasNext()){ Object key = it.next(); Object value = it.getValue();// it.setValue(newValue); }
2.有序map
commons-collections为maps提供了一个新的接口,orderedmap,这个接口是有顺序的,但是并没有进行排序。linkedmap和listorderedmap(封装器)是这个接口的两种实现。这个接口支持map迭代,同时允许对map进行前向迭代和反向迭代。
package collections;import java.util.ArrayList;import java.util.Collection;import java.util.List;import org.apache.commons.collections4.BidiMap;import org.apache.commons.collections4.CollectionUtils;import org.apache.commons.collections4.OrderedMap;import org.apache.commons.collections4.bidimap.TreeBidiMap;import org.apache.commons.collections4.map.LinkedMap;public class MapTest { public static void main(String[] args) { /** * 得到集合里按顺序存放的key之后的某一Key */ OrderedMap map = new LinkedMap(); map.put("FIVE", "5"); map.put("SIX", "6"); map.put("SEVEN", "7"); map.firstKey(); // returns "FIVE" map.nextKey("FIVE"); // returns "SIX" map.nextKey("SIX"); // returns "SEVEN" /** * BidiMap * 通过key得到value * 通过value得到key * 将map里的key和value对调 */ BidiMap bidi = new TreeBidiMap(); bidi.put("SIX", "6"); bidi.get("SIX"); // returns "6" bidi.getKey("6"); // returns "SIX" // bidi.removeValue("6"); // removes the mapping BidiMap inverse = bidi.inverseBidiMap(); // returns a map with keys and values swapped System.out.println(inverse); /** * CollectionUtils.retainAll * 得到两个集合中相同的元素 */ List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); list1.add("3"); List<String> list2 = new ArrayList<String>(); list2.add("2"); list2.add("3"); list2.add("5"); Collection c = CollectionUtils.retainAll(list1, list2); System.out.println(c); }}
2. queues&buffers 队列和缓冲
buffer接口用来支持队列和缓冲。这些接口表示集合可以定义删除的顺序。
fifo(队列)、lifo(堆栈)和priority(根据比较器的顺序)的接口实现已经被提供。
Buffer buffer = new UnboundedFifoBuffer(); buffer.add("one"); buffer.add("two"); buffer.add("three"); buffer.remove(); //removes and returns the next in order,”one” as this is a fifo buffer.remove(); //removes and returns the next in order,”two” as this is a fifo
3. bags
bag接口用于支持bag。它用于表示包含了一个对象的多个拷贝的结合。
Bag bag = new HashBag(); bag.add("one",6); //add 6 copies of “one” bag.remove("one",2); //removes 2 copies of “one” bag.getCount("one"); //returns 4
对于排序和为排序的bag,具有对应的接口实现。
® bag接口
® 固定大小的map、lru (最近最少使用算法)map和双重(dual)map
® 对象数组和map的迭代器
® map的multikey
® 大量的工具类,提供了使用api的快捷方式
® 封装器,对大多数类提供了自定义的方法
4. org.apache.commons.collections
这个包中定义了由其他包实现的接口、作为工厂类(可以实例化集合类或者集合的封装类)的共通类。一些比较重要的类有arraystack、beanmap、extendedproperties、fastarraylist、fasthashmap和fasttreemap。这些类的细节包含在javadoc中,下面只是简要的介绍各个类在实际中的应用:
arraystack:arraystack类实现了stack接口,基于arraylist用来在单线程环境中使用。例如,如果想在一个方法中使用stack进行一些处理,这个类在性能上会比stack(jdk1.4.2中使用vector)好一些。
beanmap:就像swing gui中的jbutton一样,使用beanmap,甚至可以将一个map作为一个javabean来进行处理。当在设计用来显示数据源或者应用程序配置属性的gui时,map可以在屏幕上被拖放(d&d)。
extendedproperties:这是一个非常有用的类。它和java.util.properties类似,包含了一个用于加载配置信息的load方法,但是这个类有以下的好处:
# 属性值可以分布在多行
# 提供了用于获取非字符串值的方法。例如,getfload方法用于获取一个fload类型的值。这样就不需要使用wrapper方法来转换获取的字符串值了。
fastarraylist, fasthashmap, fasttreemap:这些类可以在多线程环境中使用,如果存在很多只读操作的话。这些类是分别基于arraylist、hashmap和treemap的。
5. org.apache.commons.collections.bag
如果需要将一个对象的多个拷贝添加到一个list中时,这个包下面的类就变得非常有用了。在这种情况下,很多开发人员会将对象添加到一个arraylist中,然后每天加一次都要进行一下迭代,来判断是否添加了给定类型的对象。在线购物车是这种情况的一个实际的需求。这种方法的缺点是内存和速度上的不足。
解决上述需求的一个比较好的设计就是只保存一个对象的拷贝,而在添加同样类型的实体时,只是增加计数器的值。hashbag和treebag类(分别基于hashmap和treemap)很好的满足了这个需求。
6. org.apache.commons.collections.bidimap
很多java开发人员通过使用两个hashmap来获取一个键值,方法是将一个值作为键传递到另外一个hashmap。正常情况下,需要对同等的处理名字和值,在这种情况下,就是值也可以做为键(因为在map中键是唯一的,而值是可以不唯一的)。
关于org.apache.commons.collections.bidimap的例子是一个原型适配器,集成了peoplesoft和siebel命令行处理引擎,假定一个引擎中的每个命令在另外一个中都有同样的对应。可以在in.co.narayanan.commons.collections.bidimap中找到相关的类。可以通过siebelpeoplesoftconnector来了解这些类,siebelpeoplesoftconnector作为适配器,并包含了bidimap对象。当收到处理siebel命令的请求后,就从bidimap获取对应的peoplesoft命令,然后传送给peoplesoft命令引擎。反之亦然。样例代码中只包含应用程序的一个轮廓。
7. org.apache.commons.collections.buffer
这个包中包含了封装类,直接实现了java.util.collection接口。因此,任何实现collection接口的类都可以使用这些封装类。比较常用的类有predicatedcollection、compositecollection、synchronizedcollection、transformedcollection、typedcollection和unmodifiablecollection。下表提供了关于这些类的一个概览:
predicatedcollection:可以通过使用这个类的实例来追加限制条件,将条件定义成一个独立的对象,也就是所谓的前提条件,然后作为参数传送给封装类的工厂方法。
? compositecollection:使用这个类可以创建集合的集合,并且当添加或者删除对象时具有一个统一的视图。
? synchronizedcollection:可以使既存的集合线程安全。
? transformedcollection:当将对象添加到集合时转换对象的类型。例如由string-->integer。
? typedcollection:与java 1.5类似的泛型。
? unmodifiablecollection:使集合的引用不可以被修改。
8. org.apache.commons.collections.comparators
这个包中包含了很多可复用的类。nullcomparator类和fixedordercomparator是最常用的类。
nullcomparator:当对数组或者列表中的实体进行排序时,将null实体移到底部。
fixedordercomparator:将一个集合中的顺序重新保存在预定义的列表中。
9. org.apache.commons.collections.functors
10. org.apache.commons.collections.iterators
在这个包中包含了很多实现了java.util.iterator接口的类。比较重要的类有mapiterator、arrayiterator、collatingiterator、loopingiterator和iteratorutils。需要通过使用iteratorutils类来使用这个包中的类。
11. org.apache.commons.collections.keyvalue
这个包中的multikey类非常有用。如果想要在应用程序中创建一个域(domain)对象并将它们存储在一个基于联合逐渐的map中,就可以通过创建一个multikey的实例,使用记录的主键的值作为参数。然后将这个实例传递给map来存储域对象。
这个包中的类的其他用途是存储locale相关的实体,在这种情况下,实际的主键和locale name联合组成key。
12. org.apache.commons.collections.list
treelist、fixedsizelist、nodecachinglinkedlist、cursorablelinkedlist、transformedlist和predicatedlist类都是这个包中比较重要的类。它们的javadoc也非常清楚的描述了各自的功能。
13. org.apache.commons.collections.map
caseinsensitivemap、compositemap、fixedsizemap、flat3map、lazymap、linkedmap、lrumap、multikeymap、predicatedmap、singletonmap和staticbucketmap类都比较有用。
1 0
- apache.commons.collections4用法
- org.apache.commons.collections4
- apache-comnons系列之commons-collections4 org.apache.commons.collections4.CollectionUtils学习笔记
- java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
- java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
- POI异常解决:java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap
- 如何在集合中筛选出满足条件的元素——org.apache.commons.collections4的使用
- Apache jakarta commons Digester用法
- Apache jakarta commons Digester用法
- Apache Commons Lang3 DateUtils用法
- (转)org.apache.commons.logging用法
- org.apache.commons.logging的用法(上)
- org.apache.commons.logging的用法(下)
- org.apache.commons.beanutils.BeanUtils用法
- apache commons StringUtils及FileUtils部分用法
- org.apache.commons.lang.DateUtils的用法
- org.apache.commons.logging的用法(上)
- org.apache.commons.lang.time用法实例
- Linux系统手动安装rz sz 软件包
- 浅淡淘宝内核对LVS的性能优化
- 数据库网站资料收藏
- <java><JTable>使用AbstractTableModel实现更新、删除、插入数据
- test_title
- apache.commons.collections4用法
- 无法打开登录所请求的数据库XXX。登录失败。 用户 'NT AUTHORITY\NETWORK 登录失败
- 查看tomcat下的的日志
- Hadoop Hive 中的排序 Order by ,Sort by ,Distribute by, Cluster By,
- 解决gedit无法保存的问题
- Java中HashMap遍历的两种方式
- 基于消息,事件驱动的点滴感悟
- 推荐系统评测指标
- cmake 编译opencv 出现 The C++ compiler "C:/Program Files/Microsoft Visual Studio 10.0/VC/bin/cl.exe