Map生成器
对Map的使用相同的方式,需要一个Pair类,为了组装Map,每次调用
Generator的next()方法都必须产生一个键值对。
public class Pair<K,V> { public final K key; public final V value; public Pair(K k, V v){ key = k; value = v; } }
key和value都是pulic和final的,这是为了Pair成为只读的数据传输对象。
public class MapData<K,V> extends LinkedHashMap<K, V>{ // A Single Pair Generator public MapData(Generator<Pair<K, V>> gen, int quantity){ for(int i=0; i<quantity; i++){ Pair<K,V> p = gen.next(); put(p.key, p.value); } } // Two seperate Generators; public MapData(Generator<K> genK, Generator<V> genV, int quantity){ for(int i=0; i<quantity; i++){ put(genK.next(), genV.next()); } } // A key Generator and a single value; public MapData(Generator<K> genK, V value, int quantity){ for(int i=0; i<quantity; i++){ put(genK.next(), value); } } // An Iterable and a value Generator public MapData(Iterable<K> genK, Generator<V> genV){ for(K key : genK){ put(key, genV.next()); } } // An Iterable and a single value; public MapData(Iterable<K> genK, V value){ for(K key : genK){ put(key, value); } } public static <K, V> MapData<K, V> map(Generator<Pair<K, V>>gen, int quantity){ return new MapData<K, V>(gen, quantity); } public static <K, V> MapData<K, V> map(Generator<K> genK, Generator<V> genV, int quantity){ return new MapData<K, V>(genK, genV, quantity); } public static <K, V> MapData<K, V> map(Iterable<K> genK, V value){ return new MapData<K, V>(genK, value); } }下面是一个用MapData的实力,LettersGenerator通过产生了一个Iterator
实现了Iterable,用来测试MapData.map()方法,这些方法需要用到Iterable
class Letters implements Generator<Pair<Integer,String>>, Iterable<Integer>{ private int size = 9; private int number = 1; private char letter = 'A'; public Pair<Integer, String> next(){ return new Pair<Integer, String>(number++,""+letter++); } public Iterator<Integer> iterator() { return new Iterator<Integer>(){ public boolean hasNext() { return number < size; } public Integer next() { return number++; } public void remove() { throw new UnsupportedOperationException(); } }; } } public class MapDataTest{ public static void main(String[] args) { System.out.println(MapData.map(new Letters(), 11)); } }
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 685class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1031package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 659class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 738public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 828使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1903直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1384多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 923public enum Input { NICKEL ... -
使用enum的责任链
2012-02-04 12:39 1179package enumerated; impor ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1422EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 904一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 635Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 982Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 789{ public static void main( ... -
散列HashCode
2012-02-01 14:04 705散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 591Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 310如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 381这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器List
2012-01-19 14:40 343一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 638不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
这里我们将深入探讨`map`容器的实现方法,包括其内部结构、插入和查找操作、迭代器的使用以及一些实用的操作。 一、`map`容器的内部实现 `map`通常使用红黑树(Red-Black Tree)作为底层数据结构。红黑树是一种自...
提供的"map shnxh.cn"文件可能包含了关于`map`的使用示例代码和详细的文档说明,这将帮助你更深入地理解`map`的用法和特性。建议结合代码和文档进行学习,实践是最好的老师。 总结来说,`map`是C++ STL中的一个强大...
本教程将深入探讨`map`容器的基本概念、特性以及如何在实际编程中使用。 `map`容器的主要特点: 1. **键值对**:`map`中的每个元素都是一个键值对,由一个键(key)和一个关联的值(value)组成。键必须是唯一的,...
本文主要讨论如何在STL的 `map` 或 `set` 容器中使用类作为key,并深入解析相关的类结构设计。 #### STL set容器概述 `set` 是一个模板类,它存储的是唯一且有序的元素集合。元素按照其值进行排序,并且不允许重复...
在学习`std::map`的过程中,通过阅读嘟嘟网、网易博客、CSDN博客、科学文档和新浪博客上的文章,可以深入理解`std::map`的各种特性和应用场景,并通过实践来巩固这些知识。不断探索和练习,可以更好地掌握这个强大的...
本篇文章将深入探讨这两种容器在插入、遍历和查找操作上的差异,并通过实例分析它们各自的优缺点。 首先,`std::map`是基于红黑树实现的有序关联容器,它保证了容器内的元素按照键值排序。这意味着插入新元素时,会...
本节我们将深入探讨STL中的`map`容器,了解其基本概念,并通过实际代码示例展示如何进行增、删、查、改等操作。 `map`容器是一种关联容器,它将唯一的键值与关联的值进行存储,这里的键值通常是用来查找对应值的。`...
本课程"09、并发容器(Map、List、Set)实战及其原理"深入探讨了如何在多线程环境下有效使用Map、List和Set这三种核心数据结构。下面我们将详细讲解这些并发容器的关键知识点。 1. **并发容器概述**: 在并发编程...
《深入理解C++中的MAP容器》 在C++编程中,标准模板库(Standard Template Library, STL)提供了一种高效且方便的关联容器——map。本文将详细讲解map的特性和使用方法,帮助开发者更好地理解和运用这一强大的工具...
为了更好地理解并使用"vectormap",我们需要深入研究`vectormap.h`的内容,查看类定义、构造函数、插入、查找、删除等操作的实现,以及可能的迭代器支持。同时,需要考虑不同场景下选择使用"vectormap"还是标准的`...
根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...
本篇文章将深入探讨C++ `map`容器的基本用法以及一些高级特性。 #### 二、C++ map容器概述 `map`容器是一种关联容器,它保存的是键值对(key-value pairs),每个键值对中的键都是唯一的。`map`按照键的顺序自动排序...
本实例教程将深入讲解`map`容器的使用方法和源码实践。 1. **map容器的基本概念** `map`是一个红黑树实现的关联容器,其中的元素是键值对。每个元素的键是唯一的,用于区分不同的元素。键值对的形式是`, value>`,...
【标题】:深入理解STL中的Map容器:基本用法与操作 【描述】:本文将详细介绍STL中Map容器的基础知识,包括Map的定义、内部结构、构造函数以及数据插入的各种方法,帮助读者掌握Map的基本操作。 【标签】:map,...
在这个场景中,我们关注的是在C++ STL中的`map`容器中,使用字符串(`std::string`)作为键(key)与使用自定义结构体(struct)作为键在查找效率上的比较。`map`是一个关联容器,它提供了基于键的有序存储,通常...
在C++标准库中,`std::map`是一种关联容器,它存储键值对,其中每个键都是唯一的。`std::map`使用红黑树实现,保证了元素以升序排列。下面我们将深入探讨`std::map`的几个重要知识点。 1. **构造与插入元素**: - ...
这个压缩包中的学习资料主要涉及了两个关键知识点:Map容器的使用和JTable组件。让我们深入了解一下这两个主题。 首先,Map容器是Java编程语言中的一种核心数据结构,它存储键值对,允许我们通过键(key)来高效地...
在C++编程语言中,`map`是一种关联容器,它按照键值对(key-value pair)存储元素,其中键是唯一的。在这个特定的项目中,标题提到“c++实现的简易map”,这意味着开发者自己动手实现了一个类似标准库`<map>`的数据...
本文将深入讲解这两种容器的基本概念、工作原理以及常见操作,以帮助初学者更好地理解和运用。 **一、std::vector简介** `std::vector`是一种动态数组,可以容纳任何类型的元素。它的最大特点是可以在运行时改变...
本文将深入解析STL中的`map`用法,帮助你理解其基本概念、操作和应用场景。 1. **map的基本概念** `map`是一个关联容器,它按照键的排序来组织元素。每个元素都是一个键值对,其中键是唯一的,而对应的值可以重复...