`
racingbird
  • 浏览: 23711 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

深入容器Map

 
阅读更多

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));
	}
}
 
分享到:
评论

相关推荐

    map容器实现方法

    这里我们将深入探讨`map`容器的实现方法,包括其内部结构、插入和查找操作、迭代器的使用以及一些实用的操作。 一、`map`容器的内部实现 `map`通常使用红黑树(Red-Black Tree)作为底层数据结构。红黑树是一种自...

    stl容器map的使用

    提供的"map shnxh.cn"文件可能包含了关于`map`的使用示例代码和详细的文档说明,这将帮助你更深入地理解`map`的用法和特性。建议结合代码和文档进行学习,实践是最好的老师。 总结来说,`map`是C++ STL中的一个强大...

    Map(STL).rar_C++ map_c++ map_map stl_map容器

    本教程将深入探讨`map`容器的基本概念、特性以及如何在实际编程中使用。 `map`容器的主要特点: 1. **键值对**:`map`中的每个元素都是一个键值对,由一个键(key)和一个关联的值(value)组成。键必须是唯一的,...

    在STL的map或set容器中使用类作为key

    本文主要讨论如何在STL的 `map` 或 `set` 容器中使用类作为key,并深入解析相关的类结构设计。 #### STL set容器概述 `set` 是一个模板类,它存储的是唯一且有序的元素集合。元素按照其值进行排序,并且不允许重复...

    std map容器用法总结

    在学习`std::map`的过程中,通过阅读嘟嘟网、网易博客、CSDN博客、科学文档和新浪博客上的文章,可以深入理解`std::map`的各种特性和应用场景,并通过实践来巩固这些知识。不断探索和练习,可以更好地掌握这个强大的...

    C++11 unordered_map与map(插入,遍历,Find)效率对比。

    本篇文章将深入探讨这两种容器在插入、遍历和查找操作上的差异,并通过实例分析它们各自的优缺点。 首先,`std::map`是基于红黑树实现的有序关联容器,它保证了容器内的元素按照键值排序。这意味着插入新元素时,会...

    map_map_增删查改_STL_C++_

    本节我们将深入探讨STL中的`map`容器,了解其基本概念,并通过实际代码示例展示如何进行增、删、查、改等操作。 `map`容器是一种关联容器,它将唯一的键值与关联的值进行存储,这里的键值通常是用来查找对应值的。`...

    09、并发容器(Map、List、Set)实战及其原理

    本课程"09、并发容器(Map、List、Set)实战及其原理"深入探讨了如何在多线程环境下有效使用Map、List和Set这三种核心数据结构。下面我们将详细讲解这些并发容器的关键知识点。 1. **并发容器概述**: 在并发编程...

    MAP的讲解利用

    《深入理解C++中的MAP容器》 在C++编程中,标准模板库(Standard Template Library, STL)提供了一种高效且方便的关联容器——map。本文将详细讲解map的特性和使用方法,帮助开发者更好地理解和运用这一强大的工具...

    vectormap 支持map的顺序查找

    为了更好地理解并使用"vectormap",我们需要深入研究`vectormap.h`的内容,查看类定义、构造函数、插入、查找、删除等操作的实现,以及可能的迭代器支持。同时,需要考虑不同场景下选择使用"vectormap"还是标准的`...

    List set map集合容器的区别

    根据给定文件的信息,我们可以详细地探讨一下Java中几种主要的集合容器——List、Set以及Map的区别,并且深入了解它们各自的特性和应用场景。 ### 一、List #### 1. ArrayList - **特点**:`ArrayList`是基于动态...

    全 C++ map 的用法

    本篇文章将深入探讨C++ `map`容器的基本用法以及一些高级特性。 #### 二、C++ map容器概述 `map`容器是一种关联容器,它保存的是键值对(key-value pairs),每个键值对中的键都是唯一的。`map`按照键的顺序自动排序...

    每天学点C++(C++实例教程:教程+源码)map容器.zip

    本实例教程将深入讲解`map`容器的使用方法和源码实践。 1. **map容器的基本概念** `map`是一个红黑树实现的关联容器,其中的元素是键值对。每个元素的键是唯一的,用于区分不同的元素。键值对的形式是`, value&gt;`,...

    MAP用法

    【标题】:深入理解STL中的Map容器:基本用法与操作 【描述】:本文将详细介绍STL中Map容器的基础知识,包括Map的定义、内部结构、构造函数以及数据插入的各种方法,帮助读者掌握Map的基本操作。 【标签】:map,...

    map中字符串与结构体作key效率比较

    在这个场景中,我们关注的是在C++ STL中的`map`容器中,使用字符串(`std::string`)作为键(key)与使用自定义结构体(struct)作为键在查找效率上的比较。`map`是一个关联容器,它提供了基于键的有序存储,通常...

    Map容器的用法(STL).docx

    在C++标准库中,`std::map`是一种关联容器,它存储键值对,其中每个键都是唯一的。`std::map`使用红黑树实现,保证了元素以升序排列。下面我们将深入探讨`std::map`的几个重要知识点。 1. **构造与插入元素**: - ...

    用于自己学习的文件,包括map容器的适用以及JTable组件

    这个压缩包中的学习资料主要涉及了两个关键知识点:Map容器的使用和JTable组件。让我们深入了解一下这两个主题。 首先,Map容器是Java编程语言中的一种核心数据结构,它存储键值对,允许我们通过键(key)来高效地...

    c++实现的简易map

    在C++编程语言中,`map`是一种关联容器,它按照键值对(key-value pair)存储元素,其中键是唯一的。在这个特定的项目中,标题提到“c++实现的简易map”,这意味着开发者自己动手实现了一个类似标准库`&lt;map&gt;`的数据...

    vector与map简介_map_资料_vector_

    本文将深入讲解这两种容器的基本概念、工作原理以及常见操作,以帮助初学者更好地理解和运用。 **一、std::vector简介** `std::vector`是一种动态数组,可以容纳任何类型的元素。它的最大特点是可以在运行时改变...

    STL中map用法详解

    本文将深入解析STL中的`map`用法,帮助你理解其基本概念、操作和应用场景。 1. **map的基本概念** `map`是一个关联容器,它按照键的排序来组织元素。每个元素都是一个键值对,其中键是唯一的,而对应的值可以重复...

Global site tag (gtag.js) - Google Analytics