转载 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案例`为我们提供了一个学习和实践C++`Multimap`容器的好机会,通过阅读和理解`main.cpp`的代码,我们可以掌握`Multimap`的各种操作,并了解其在实际问题中的应用。同时,`README.txt`...
在JavaScript编程中,我们经常会遇到需要存储键值对的数据结构,比如对象(Object)。然而,JavaScript的对象只能拥有唯一键的情况可能会限制我们的需求。在这种情况下,谷歌的Guava库中的HashMultimap提供了一种...
在STL容器中,`multimap`是一种关联容器,它允许元素以键值对的形式存储,并且一个键可以对应多个值。与`map`不同的是,`map`保证了键的唯一性,而`multimap`则允许重复的键。 在`multimap`中,每个元素都是一个...
在C++编程中,`std::multimap`是标准模板库(STL)中的一种关联容器。它是一个可以存储键值对的数据结构,其中键值可以重复。与`std::map`不同,`std::multimap`允许有多个具有相同键的元素。在“好友列表”这个场景中...
- LazyMap:懒加载的Map,其值仅在需要时才被计算。 - IdentityMap:与HashMap类似,但使用对象身份而不是相等性来比较键。 ***mons Collections库还定义了一些用于操作集合的算子和工厂方法,例如: - ...
多图MultiMAP是一种集成单细胞多组学的方法。 MultiMAP也可以用于批量校正。 更多详细信息可在我们的。安装我们正在努力让包装上pip尽快。 同时享受此占位符解决方案! git clone ...
通过multimap进行信息的插入 key(部门编号) value(员工) 分部门显示员工信息 实现步骤: 创建10名员工,放到vector中 遍历vector容器,取出每个员工,进行随机分组 分组后,将员工部门编号作为key,具体员工作为...
### C++ STL 中 `std::multimap` 与 `std::array` 使用详解 #### `std::multimap` 概述 `std::multimap` 是 C++ 标准模板库(STL)中的一个重要关联容器,其特点是可以容纳具有相同键的多个元素。与 `std::map` ...
本程序用c++标准库中的快速排序算法以及容器map和multimap实现了对文件中出现频率靠前的单词进行了统计,至于文件大小取决于你机器所剩的内存数,如果文件数据时海量的(上亿)则本程序可能不适合,需要按照海量数据...
这个问题可以通过使用C++中的`map`和`multimap`数据结构来解决。 首先,我们需要理解`map`和`multimap`的基本概念。`map`是一个关联容器,它包含唯一键值对,这里的键是单词,值是对应的出现次数。`map`内部默认...
标题中的“multimap实现tlv”指的是在C++编程中使用`std::multimap`容器来实现一种特定的数据结构——TLV(Tag-Length-Value)。TLV是一种常见于网络协议和数据序列化中的数据表示方式,它将数据分为三个部分:标签...
标题中的“基于multimap映射的动态内存分配算法探究”是指一种新的动态内存管理策略,它利用了C++ STL中的`multimap`容器来优化内存分配的过程。动态内存分配是编程中一个重要的概念,特别是在资源有限的环境中,如...
一、multimap(一对多索引) C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include #...
Multimap - 允许同一个键有多个值的映射 安装 npm install multimap --save 用法 如果您想在存在时使用本机版本并在不存在时回退到 polyfill,但不想在全局范围内实现Map ,请执行以下操作: var Multimap = require...
multimap.yml
在STL中,`map`和`multimap`就是这样的关联式容器。这两个容器都是基于**红黑树**这种自平衡二叉查找树的数据结构来实现的,保证了在平均情况下,查找、插入和删除操作的时间复杂度为O(log n)。 **map**容器: `map...
- multimap(多重映像):与map类似,允许键的重复。 - set(集合):唯一元素的集合,自动排序。 - multiset(多重集合):与set类似,允许元素重复。 对于向量、链表和双端队列,它们都是线性数据结构,但链表不...