设为首页 收藏本站
查看: 901|回复: 0

[经验分享] Apache-Commons-Collections

[复制链接]

尚未签到

发表于 2015-8-1 13:21:06 | 显示全部楼层 |阅读模式
  · Apache Commons Collections download address:
  http://commons.apache.org/proper/commons-collections/download_collections.cgi
  · User Guide:
  http://commons.apache.org/proper/commons-collections/userguide.html
  · Version 4.0 API:
  http://commons.apache.org/proper/commons-collections/javadocs/api-release/index.html
  

简介
  Java的集合框架(Java Collections Framework)是在JDK 1.2版本添加进来的,它 提供的强大的数据结构加快了Java程序的开发,由此作为是java的标准库。
  Commons-Collections建立在JDK类之上,提供新的接口、新的实现和新的功能,主要功能如下:
  

Map的遍历
  JDK提供的Map接口使得遍历Map非常不方便,只能单独的遍历EntrySet或者KeySet。Commons-Collections提供的MapIterator接口可以非常简单地遍历Map:
  public interface MapIterator extends Iterator //继承于Java的Iterator,只是个接口
  Commons-Collections中所有的Map实现类中都有mapIterator()方法,通过调用该方法可以获得Map的MapIterator的对应实例对象。以BidiMap为例说明如何使用:





   1: BidiMap bidiMap;
   2: bidiMap = new TreeBidiMap();
   3: bidiMap.put("阿勒泰", "0906");
   4: bidiMap.put("乌鲁木齐", "0996");
   5: bidiMap.put("武汉", "010");
   6: bidiMap.put("深圳", "0755");
   7: MapIterator mit = bidiMap.mapIterator();
   8: while(mit.hasNext()) {
   9:     String key = mit.next();
  10:     String value = mit.getValue();
  11:     // mit.setValue("8888");//BidiMap是不可修改的,故此处不能用
  12: }







BidiMap – 接口
  public interface BidiMap extends IterableMap
  BidiMap是Java Map的一个扩展,实现了Key和Value之间的双向查找。要求Value和Key一样不能重复。应用场景:“城市名”和“电话区号”之间一一对应,我们可以通过城市名查找区号,也可以通过区号查找所对应的城市。
  BidiMap是不可修改的,也就是说在遍历Map时不能修改value的值。
  BidiMap是个接口,实现类包括:
  · DualHashBidiMap – 使用两个HashMap实现BidiMap。
  · DualLinkedHashBidiMap – 使用两个LinkedHashMap实现BidiMap,元素以加入的先后顺序有序排列。
  · DualTreeBidiMap – 使用两个TreeMap实现SortedBidiMap。构造时,可分别为Key和Value指定Comparator。
  · TreeBidiMap – 红黑树机制的排序BidiMap。没有提供Comparator的构造器,只能使用红黑树机制排序。





   1: String value = bidiMap.get("Key值"); //通过Key获得Value
   2: String key = bidiMap.getKey("Value值"); //通过Value获得Key
  

MultiMap – 接口
  public interface MultiMap extends IterableMap
  不知道是Apache不推荐使用还是什么的,在线API中没有显示它的存在。
  MultiMap只有只有一个实现类:public class MultiValueMap implements MultiMap
  MultiMap是指一个Key可以对应多个Value。put方法和一般的Map一样,只是在通过key获得value时,返回的是value集合。使用示例如下:





   1: MultiValueMap multiMap = new MultiValueMap();
   2: multiMap.put("Alex", "value1");
   3: multiMap.put("Alex", "value2");
   4: multiMap.put("Alex", "value3");
   5: Collection v1 = multiMap.getCollection("Alex");
   6: for(String s : v1) {
   7:     System.out.println(s);
   8: }







LzayMap – 类
  public class LazyMap extends AbstractMapDecorator implements Serializable
  此处的Lazy概念和Hibernate中的Lazy概念不同。Hibernate中如果lazy设置为true,表示为延迟加载,只有在使用到数据的时候才会去从数据库取得数据。
  LazyMap通过包装一个Map对象来生成LazyMap实例,当使用get(Object key)方法时,如果该key在map中不存在,factory对象(包装时传进来的)会创建一个value对象与该key对应 ,并将这组key-value加入到map中。
  也就是说,LazyMap添加元素时,跟普通的Map一样。只是在get元素时,如果存在,则返回对应的value;如果不存在,则创建一个value与查询的key关联,并将其key-value加入到map中,返回新创建的value对象。
  LazySortedMap是LazyMap的子类,有序的LazyMap。使用方法和LazyMap一样,只是被包装Map必须是SortedMap或SortedMap的子类。

Bag – 接口





   1: Factory factory = new Factory() {
   2:     @Override
   3:     public String create() {
   4:         String s = "全能点读机";
   5:         return s;
   6:     }
   7: };
   8: Map lazyMap = LazyMap.lazyMap(new HashMap(), factory);
   9: lazyMap.put("语文", "张老师");
  10: lazyMap.put("数学", "李老师");
  11: lazyMap.put("音乐", "汪峰老师");
  12: System.out.println(lazyMap.get("音乐")); //输出 -- 汪峰老师
  13: System.out.println(lazyMap.get("英语")); //英语在lazyMap中不存在,但是会输出factory给其创建的 "全能点读机"

  Bag是Commons-Collections定义的一种记录元素出现次数的集合接口。
  public interface Bag extends Collection
  Bag的实现类有很多,通常我们使用HashBag和TreeBag:
  · HashBag --- 使用HashMap来存储数据
  · TreeBag --- 使用TreeMap来存储数据
  实例代码:





   1: Bag bag = new HashBag();
   2: bag.add("basketball"); //加入一个篮球
   3: bag.add("basketball",4); //加入4个篮球
   4: bag.remove("basketball", 2); //去除2个篮球
   5: bag.getCount("basketball"); //统计,现在还剩下3个篮球

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93038-1-1.html 上篇帖子: apache之gzip实践 下篇帖子: Apache模块开发/用C语言扩展apache
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表