`
尧尧1975417219
  • 浏览: 6309 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

自定义实现map的高级功能

 
阅读更多
   我们在学习和工作中经常要用到map这个集合来进行数据存储,我对map的理解是,map是由键值对(key,values)组成的无序集合。系统中提供了一个map,但是他功能很有限,无法通过一个key存放多个values,考虑到这个问题,通过对map源码的研究基础上,我实现了可以通过一个key存放多个values的map。具体实现,请耐心看完文章。

  创建一个内部类entry,通过构造器来存放一系列key和values:

   
class entry {
		Object key;
		Object values1;
		Object values2;
		Object values3;
		Object values4;

		public entry(Object key, Object values1) {

			this.key = key;
			this.values1 = values1;
		}

		public entry(Object key, Object values1, Object values2) {

			this.key = key;
			this.values1 = values1;
			this.values2 = values2;
		}

		public entry(Object key, Object values1, Object values2, Object values3) {

			this.key = key;
			this.values1 = values1;
			this.values2 = values2;
			this.values3 = values3;
		}

		public entry(Object key, Object values1, Object values2,
				Object values3, Object values4) {
			this.key = key;
			this.values1 = values1;
			this.values2 = values2;
			this.values3 = values3;
			this.values4 = values4;
		}

	}


    以创建的类entry为数组,实现数据的存储并实现map的put方法:

   
entry[] entry = new entry[1024];
int count = 0;//entry的长度


    put方法:
  
          /**
	 * 存放一个values
	 * 
	 * @param key
	 * @param values1
	 */
	public void put(Object key, Object values1) {

		for (int i = 0; i < count; i++) {
			if (entry[i].key.equals(key)) {
				System.out.println("容器已存在该key请换一个key");
				return;
			}
		}
		entry[count++] = new entry(key, values1);
	}

	/**
	 * 通过key存放两个values
	 */
	public void put(Object key, Object values1, Object values2) {
		for (int i = 0; i < count; i++) {
			if (entry[i].key.equals(key)) {
				System.out.println("容器已存在该key请换一个key");
				return;
			}
		}
		entry[count++] = new entry(key, values1, values2);

	}

	/**
	 * 通过key存放三个values
	 */
	public void put(Object key, Object values1, Object values2, Object values3) {
		for (int i = 0; i < count; i++) {
			if (entry[i].key.equals(key)) {
				System.out.println("容器已存在该key请换一个key");
				return;
			}
		}
		entry[count++] = new entry(key, values1, values2, values3);
	}


   get方法的实现:
 
   1.通过key获取第一个values的实现:

/**
	 * 通过key获取第一个values
	 */
	public Object getValues1(Object key) {
		Object values;
		for (int i = 0; i < count; i++) {
			if (entry[i].key.equals(key)) {

				values = entry[i].values1;
				return values;
			} else {
				System.out.println("不存在!");
			}
		}

		return null;
	}

     2.通过key和values下标获取任意values的实现

    
/**
	 * 通过key和values位置获取values
	 */
	public Object getValues(Object key, int valuesIndex) {

		for (int j = 0; j < count; j++) {// 遍历key
			if (entry[j].key.equals(key)) {// 如果map中存在该key

				if (valuesIndex == 1) {//
					return entry[j].values1;
				} else if (valuesIndex == 2) {
					return entry[j].values2;
				} else if (valuesIndex == 3) {
					return entry[j].values3;
				} else {
					System.err.println("下标不在范围!");
					return null;
				}

			}
		}
		return null;
	}


  显示key对应的所有values值的方法:

  
/**
	 * 显示所有values
	 */
	public void showAllValues(Object key) {

		for (int i = 0; i < count; i++) {// 遍历key
			if (entry[i].key.equals(key)) {// 如果map中存在该key
                               System.out.println("显示所有values:");
				if (entry[i].values2 == null) {//
					System.out.println(entry[i].values1);
				} else if (entry[i].values2 != null && entry[i].values3 == null) {
					System.out.println("[" + entry[i].values1 + ","
							+ entry[i].values2 + "]");
				} else if (entry[i].values3 != null) {
					System.out.println("[" + entry[i].values1 + ","
							+ entry[i].values2 + "," + entry[i].values3 + "]");
				} else {
					System.err.println("下标不在范围!");

				}
			}
		}

	}


   验证map功能:
MyMap_003 map = new MyMap_003();
		map.put("1", "11111");
		map.put("2", "1111", "222");
		map.put("3", "1", "222222", "333333");
		System.out.println("第一个values:"+map.getValues1("1"));
		System.out.println("第二个values:"+map.getValues("2", 2));
		System.out.println("第三个values:"+map.getValues("3", 3));
		map.showAllValues("3");

   运行结果如下:
第一个values:11111
第二个values:222
第三个values:333333
显示所有values:
[1,222222,333333]
分享到:
评论
1 楼 come_for_dream 2014-06-17  
加油哦!!!

相关推荐

    实现在C#程序中实现自定义图例功能

    ### 实现在C#程序中实现自定义图例功能 在地理信息系统(GIS)开发中,...通过这种方式,不仅可以实现图例的基本功能,还可以进一步扩展,如支持动态调整图例样式、位置等高级功能,从而更好地满足不同场景下的需求。

    微信小程序基于canvas的自定义地图控件,实现瓦片地图等SimpleMap-wx-master.zip

    在给定的压缩包文件“SimpleMap-wx-master.zip”中,包含了一个名为“SimpleMap-wx-master”的项目,该项目专门针对微信小程序设计了一种基于canvas的自定义地图控件,用于实现瓦片地图功能。以下将详细介绍这一技术...

    利用js实现Map

    实现Map功能 在JavaScript中,虽然已经有了内置的`Map`,但理解其实现原理对我们学习和使用这个数据结构大有裨益。下面是一个简单的`Map`实现示例: ```javascript class SimpleMap { constructor() { this....

    Google map 高级特性

    对于开发者而言,Google Maps API是强大的资源,可以集成到自己的网站或应用中,实现地图嵌入、地点搜索、路线规划等功能。同时,Google Map Platform提供了各种开发工具和服务,如Geocoding API、Directions API、...

    mapreduce wc单词计数 自定义分区 自定义排序实现

    在这个特定的案例中,我们不仅实现了基本的WordCount功能,还扩展了MapReduce的能力,通过自定义分区和自定义排序来优化数据处理流程。 首先,基础的`WordCount`实现,通常包含以下四个步骤: 1. **Map阶段**:...

    百度地图自定义大头针(Marker)、自定义信息窗口(InfoBox)

    除了基础的自定义,你还可以实现更多高级功能,如动态加载内容、响应式设计、动画效果等。例如,可以使用JavaScript动态生成HTML内容,或者通过CSS实现InfoBox的动画效果。 总的来说,通过百度地图API,开发者可以...

    Qt实现高级思维导图

    在本文中,我们将深入探讨如何使用Qt框架来实现一个功能丰富的高级思维导图应用程序。Qt是一个跨平台的应用程序开发框架,广泛应用于C++编程,它提供了丰富的图形用户界面(GUI)工具,使得开发者能够轻松创建出高效...

    rammap自动运行程序

    **RAMMap工具详解** RAMMap是一款强大的内存分析工具,由微软的 Sysinternals 团队开发,...了解如何正确配置和利用RAMMap的自动化功能,对于系统管理员和性能优化人员来说,是提升工作效率和解决内存相关问题的关键。

    Go-syncmap一个基于代码生成的Gosync.Map类型实现

    而`Go-syncmap`允许用户定义自己的操作,如批量加载、更新、删除等高级功能,以便更好地适应特定场景。 3. **线程安全**:`Go-syncmap`继承了`sync.Map`的并发安全特性,保证了在多goroutine环境下操作的正确性。这...

    antv l7 实现自定义地图 以及地图抬高图层 以及散点轮播显示弹窗 鼠标悬浮弹窗

    在本项目中,我们将深入探讨如何使用蚂蚁金服的开源数据可视化库——antv L7,来实现自定义地图、地图抬高图层、散点轮播显示弹窗以及鼠标悬浮时的弹窗功能。antv L7 是一个基于 WebGL 的地图渲染库,特别适合进行大...

    m_map用法详解.rar_M map_m_map_m_map sst_matlab世界地图_世界地图 MATLAB

    八、高级功能 除了基础绘图,m_map还提供了更高级的功能,如地图动画、交互式地图操作、地图数据的读写等。例如,你可以利用`m_anim`制作地图变化的动画,或者通过`m_edit`进行交互式地图编辑。 总结来说,m_map...

    shadowmap阴影实现

    MyGLSL.cpp, shadowmap.cpp, Camera.cpp, StdAfx.cpp, shadowmap.dsp, shadowmap.dsw**: 这些文件是项目的主要组成部分,它们分别包含了项目框架、基本绘制操作、GLSL相关的自定义函数、阴影映射的具体实现、摄像机...

    newgateway-xdh-map-master_newgateway_xdh底图深色_地图插件_xdh-Map_

    《newgateway-xdh-map-master_newgateway_xdh底图深色_地图插件_xdh-Map_》是一款专为newgateway框架设计的高级地图插件,旨在提供深色风格的底图,增强用户在视觉上的体验。这个插件适用于那些希望在自己的应用中...

    GeoMap4.0安装包

    7. **配置环境变量**:对于高级用户,可能需要配置环境变量以确保GeoMap4.0能正确找到其库文件和配置文件。但这通常不是必需的,只有在遇到特定问题时才需要手动设置。 8. **等待安装完成**:安装过程可能需要几...

    WTL通过自定义控件实现添加图片UI

    在本文中,我们将深入探讨如何使用Windows Template Library (WTL) 实现自定义控件以创建具有图片功能的用户界面。WTL 是一个轻量级的C++库,它为开发Windows应用程序提供了一种高效的方法,特别是对于创建桌面应用...

    JavaScript中实现map功能代码分享

    此外,虽然这个自定义Map类实现了基本的功能,但它没有考虑到一些高级特性,如迭代器、弱引用键或处理键值对的迭代操作。如果你需要这些特性,可以扩展这个类以支持它们。 总之,自定义JavaScript Map类提供了一种...

    SVG自定义地图 自定义点点击触发事件

    SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它允许开发者创建可缩放的、清晰的图形,无论放大多少倍都...在Android Studio中,结合SVG库和自定义View,我们可以实现这种高级功能,提升用户体验。

    classMap的使用

    在实际应用中,`classMap`可能还有其他高级功能,如迭代器支持、类型检查、默认值设置等。对于大型项目,你可能还会考虑使用ES6的类语法来定义`ClassMap`,并利用`Symbol.iterator`来实现可迭代特性,使其更符合...

    GoMap-3D Map for AR Gaming

    虽然基础功能可以通过检查器完成,但对性能优化或者特殊效果的需求,开发者可以通过编写自定义脚本来实现。例如,他们可以编写脚本来改变地图的光照效果、添加动态天气系统,或者实现复杂的碰撞检测机制。 至于...

    Go-mapstructure-Go库用于解码泛型map值成Go结构体

    `go-mapstructure`还支持一些高级特性,例如自定义解码器、错误处理、转换规则等。例如,我们可以为特定字段指定自定义的解码逻辑,或者为整数和浮点数之间的转换设置默认行为。此外,该库还提供了配置选项,用于...

Global site tag (gtag.js) - Google Analytics