转载 http://blog.csdn.net/chenleixing/article/details/43121435
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有值 --创建的默认值--
相关推荐
多图这是语言缺少的multimap集合(这也是创建适当的库/包的一种简单做法)。 多重映射(有时也称为多重哈希或多重字典)是映射或关联数组抽象数据类型的概括,其中多个以上值可以与给定键相关联并返回给定键。 此...
cpp代码-Multimap 案例
哈希多图 Java的HashMultimap集合在JavaScript上的实现
Multimap-----------------------------------------------113 Stack---------------------------------------------------136 Queue---------------------------------------------------138 Priority_queue-------...
多映射示例:multimap 实现的简单好友列表。
stl容器multimap的使用 包含6.0代码 以及详细的文档说明
多图MultiMAP是一种集成单细胞多组学的方法。 MultiMAP也可以用于批量校正。 更多详细信息可在我们的。安装我们正在努力让包装上pip尽快。 同时享受此占位符解决方案! git clone ...
通过multimap进行信息的插入 key(部门编号) value(员工) 分部门显示员工信息 实现步骤: 创建10名员工,放到vector中 遍历vector容器,取出每个员工,进行随机分组 分组后,将员工部门编号作为key,具体员工作为...
本程序用c++标准库中的快速排序算法以及容器map和multimap实现了对文件中出现频率靠前的单词进行了统计,至于文件大小取决于你机器所剩的内存数,如果文件数据时海量的(上亿)则本程序可能不适合,需要按照海量数据...
一、multimap(一对多索引) C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include #...
Multimap - 允许同一个键有多个值的映射 安装 npm install multimap --save 用法 如果您想在存在时使用本机版本并在不存在时回退到 polyfill,但不想在全局范围内实现Map ,请执行以下操作: var Multimap = require...
multimap.yml
# std::multimap,T> -- via pmap or pmap_member command # std::set<T> -- via pset command # std::multiset<T> -- via pset command # std::deque<T> -- via pdequeue command # std::stack<T> -- via pstack ...
c++ vs2019 cpp20规范的STL库的map与multimap源码分析
摘要:对多种不同的动态内存分配算法的特点与优劣进行对比、分析,在兼顾效率和内存碎片率指标的要求下,提出了基于multimap映射的动态内存分配算法。该算法以内存
C++使用multimap实现tlv,支持重复tlv。实现代码+Makefile
用AVL-tree数据结构作为底层机制,以STL底层空间配置器和iterator_traits编程技法实作出一个独立的关联式容器(map, set, multimap, multiset),并对外提供接口实现和STL完全兼容的容器。
一共四个doc文件,list综合实例、multimap和map的实例、set和multiset的综合实例、vector综合实例