BidiMapMultiMapLazyMap-apache-commons-collections中Map辅助类的使用

今天自己利用周末的时间额外学习了和测试了一下commons-collections中Map辅助类的,感觉还是不错的,挺有用的,尽管我们用JDK类里给的工具经过业务逻辑处理也能达到相同的作用与效果,但毕竟作为一个开源的工具类辅助类,apache推出来的,对它有个了解还是有必要的,使用起来很方便和顺手,特意在这里记录一下,和大家一同分享与进步,同时加深自己的印象(本人用的3.2版本)。

BidiMap,“bidi”是单词bidirectional的简写,意思是双向的,故而可以大概想到这个Map的“特长”是通过key找到value,又可通过value找到key(当然我们用JDK中的Map调用entrySet等遍历也可以做到,只不过这个是写好封装好了的,更简便易用些),故而BidiMap当中key和value都不能重复了。


MultiMap,就是说一个key不在是简单的指向一个对象,而是一组对象,这个一组对象不是我们想象的普通用法value一次存入一个包含多个对象的集合或者数组,而是它可以对一个key,进行多次add,多次add的value都会存入这一个key对应的对象中(其实底层是个ArrayList实现这个存储的即数组实现),remove()的时候跟普通的Map无异,只是在get()时返回一个Collection(ArrayList实例),利用MultiMap,我们就可以很方便的往一个key上放数量不定的对象,也就实现了一对多,很方便的。


LazyMap,意思就是这个Map中的键/值对一开始并不存在,当被调用到时才创建,如果get(key)这个key不存在的话,会返回实例化中传入的factory里方法的返回值(具体看下边代码就一目了解了),的这样的解释初听上去是不是有点不可思议?这样的LazyMap有用吗?我们这样来理解:我们需要一个Map,但是由于创建成员的方法很“重”(比如数据库访问),或者我们只有在调用get()时才知道如何创建,或者Map中出现的可能性很多很多,我们无法在get()之前添加所有可能出现的键/值对,或者任何其它解释得通的原因,我们觉得没有必要去初始化一个Map而又希望它可以在必要时自动处理数据生成的话,LazyMap就变得很有用了。



测试例子,码农程序猿一看就知道怎么用了:

package apache_commons_collections;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.Factory;
import org.apache.commons.collections.MultiHashMap;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
import org.apache.commons.collections.map.LazyMap;

@SuppressWarnings("deprecation")
public class LazymapMultimapBidimapTest {
	public static void main(String arg[]){
		testBidiMap();
		testMultiMap();
		testLazyMap();
	}
	
	public static  void testBidiMap(){		//bidiMap测试
		BidiMap bidiMap=new DualHashBidiMap();		//key,value都不予许相同
		bidiMap.put("chen",24);
		bidiMap.put("lei",11);
		System.out.println(bidiMap.get("chen"));
		System.out.println(bidiMap.getKey(11));
	}
	
	public static void testMultiMap(){		//MultiMap测试
		@SuppressWarnings("deprecation")
		MultiMap multiMap=new MultiHashMap();
		multiMap.put("chen","男");
		multiMap.put("chen",13);
		multiMap.put("chen","  zhongguo  ");
		System.out.println(multiMap.get("chen"));	//底层是用的ArrayList
	}
	
	public static void testLazyMap(){	//LazyMap测试
		Factory valFactory= new Factory(){	//创建一个工厂,实现create方法
			public Object create(){
				return "--创建的默认值--";
				
			}
		};
		Map lazyMap=LazyMap.decorate(new HashMap(), valFactory);	//当此lazyMap调用get(key)时,如果无此key则返回varFactory里create方法返回的值
		lazyMap.put("chen", "lazyMap中这个key有值");
		System.out.println(lazyMap.get("chen"));	//有key对应的值时
		System.out.println(lazyMap.get(122));	//无此key时
	}
}

输入结果:

24
lei
[男, 13,   zhongguo  ]
lazyMap中这个key有值
--创建的默认值--


over了,当然这是最常用也是基本使用,如果你有兴趣想探索更深的,去http://commons.apache.org/proper/commons-collections/下载相关源码和API文档,可以研究研究。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: commons-collectionsApache Commons项目的一个子项目,提供了一组扩展和增强了Java集合框架的工具commons-collections 4.1 是该项目的一个版本。 commons-collections 4.1jar是一个Java归档文件(jar),其包含了commons-collections 4.1版本的源代码和编译后的文件。通过将该jar文件添加到Java项目的路径,开发人员可以使用commons-collections提供的丰富功能来简化集合操作的编写。 该jar文件可以通过将其下载到本地计算机,然后在项目导入jar包来使用。导入后,开发人员可以使用 commons-collections提供的各种集合和算法,如List、Set、Map、Queue、Bag等,来处理和操作集合数据。通常,通过导入commons-collections jar包后,开发人员可以直接使用其提供的,而不需要自己编写复杂的集合操作代码。 commons-collections的jar文件具有良好的移植性,可以在不同的Java平台上使用,例如Java SE、Java EE等。它还具有广泛的应用范围,可用于各种Java项目,包括Web应用程序、桌面应用程序、企业应用程序等。 总结来说,commons-collections 4.1jar是一个包含了commons-collections 4.1版本源代码和编译后的文件的Java归档文件,它为开发人员提供了丰富的集合操作工具,可以简化和加速Java项目的集合操作。 ### 回答2: commons-collections4.1.jar 是一个开放源代码的 Java 库,它提供了一组实用的集合和算法,以增强 Java 标准库集合的功能。 commons-collections4.1.jar 包含了各种实现了 List、Set、Queue、Map 等接口的集合,比如 ArrayList、LinkedList、HashSet、TreeSet、HashMap 等。这些集合提供了更多的功能与选项,满足了不同场景下的需求。 此外,commons-collections4.1.jar 还提供了一些扩展的数据结构,如 MultiHashMap、MultiValueMap 等。这些数据结构允许一个键对应多个值,提供了更灵活的数据存储方式。 commons-collections4.1.jar 还包含了一些实用的算法,如排序、查找、遍历等。通过这些算法,我们可以更方便地对集合进行操作和处理。 commons-collections4.1.jar 提供了一些实用的工具,如 Predicate、Transformer、Comparator 等。这些工具可以帮助我们更方便地进行集合操作,比如筛选、映射、比较等。 总之,commons-collections4.1.jar 是一个非常实用的 Java 库,提供了丰富的集合、算法和工具,能够大大提高开发效率,简化代码编写。无论是在开发大型应用程序还是小型项目,都可以通过引入 commons-collections4.1.jar 来充分利用其提供的功能和特性。 ### 回答3: commons-collections4.1.jar是Apache Commons项目的一部分,是一个Java集合框架库。该库提供了一组扩展和增强了Java集合框架的和接口。 commons-collections4.1.jar包含了一些实用的和接口,可以用于处理各种不同型的集合。它提供了许多方便的方法和工具,可以简化集合操作的开发过程。 该库包含的一些主要功能有: 1. 扩展集合commons-collections4.1.jar提供了一些扩展了Java集合,例如改进了性能和功能的List、Set、Map等。 2. 集合工具:该库还提供了一些实用的集合工具,例如CollectionUtils和ListUtils等,可以方便地对集合进行操作和处理。 3. 各种集合实现:commons-collections4.1.jar还提供了一些特殊的集合实现,例如CircularFifoQueue、ListOrderedMap等,可以满足不同场景下的需求。 4. 强大的迭代器包装器:该库还提供了一些强大的迭代器包装器,例如TransformedIterator和FilterIterator等,可以对集合的元素进行处理和过滤。 通过使用commons-collections4.1.jar,开发者可以更高效地处理和操作集合,减少开发时间和工作量。这个库已经在许多Java项目得到了广泛使用,并且由于其丰富的功能和高效的性能而受到开发者的青睐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值