我们在学习和工作中经常要用到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]
分享到:
相关推荐
### 实现在C#程序中实现自定义图例功能 在地理信息系统(GIS)开发中,...通过这种方式,不仅可以实现图例的基本功能,还可以进一步扩展,如支持动态调整图例样式、位置等高级功能,从而更好地满足不同场景下的需求。
在给定的压缩包文件“SimpleMap-wx-master.zip”中,包含了一个名为“SimpleMap-wx-master”的项目,该项目专门针对微信小程序设计了一种基于canvas的自定义地图控件,用于实现瓦片地图功能。以下将详细介绍这一技术...
实现Map功能 在JavaScript中,虽然已经有了内置的`Map`,但理解其实现原理对我们学习和使用这个数据结构大有裨益。下面是一个简单的`Map`实现示例: ```javascript class SimpleMap { constructor() { this....
对于开发者而言,Google Maps API是强大的资源,可以集成到自己的网站或应用中,实现地图嵌入、地点搜索、路线规划等功能。同时,Google Map Platform提供了各种开发工具和服务,如Geocoding API、Directions API、...
在这个特定的案例中,我们不仅实现了基本的WordCount功能,还扩展了MapReduce的能力,通过自定义分区和自定义排序来优化数据处理流程。 首先,基础的`WordCount`实现,通常包含以下四个步骤: 1. **Map阶段**:...
除了基础的自定义,你还可以实现更多高级功能,如动态加载内容、响应式设计、动画效果等。例如,可以使用JavaScript动态生成HTML内容,或者通过CSS实现InfoBox的动画效果。 总的来说,通过百度地图API,开发者可以...
在本文中,我们将深入探讨如何使用Qt框架来实现一个功能丰富的高级思维导图应用程序。Qt是一个跨平台的应用程序开发框架,广泛应用于C++编程,它提供了丰富的图形用户界面(GUI)工具,使得开发者能够轻松创建出高效...
**RAMMap工具详解** RAMMap是一款强大的内存分析工具,由微软的 Sysinternals 团队开发,...了解如何正确配置和利用RAMMap的自动化功能,对于系统管理员和性能优化人员来说,是提升工作效率和解决内存相关问题的关键。
而`Go-syncmap`允许用户定义自己的操作,如批量加载、更新、删除等高级功能,以便更好地适应特定场景。 3. **线程安全**:`Go-syncmap`继承了`sync.Map`的并发安全特性,保证了在多goroutine环境下操作的正确性。这...
在本项目中,我们将深入探讨如何使用蚂蚁金服的开源数据可视化库——antv L7,来实现自定义地图、地图抬高图层、散点轮播显示弹窗以及鼠标悬浮时的弹窗功能。antv L7 是一个基于 WebGL 的地图渲染库,特别适合进行大...
八、高级功能 除了基础绘图,m_map还提供了更高级的功能,如地图动画、交互式地图操作、地图数据的读写等。例如,你可以利用`m_anim`制作地图变化的动画,或者通过`m_edit`进行交互式地图编辑。 总结来说,m_map...
MyGLSL.cpp, shadowmap.cpp, Camera.cpp, StdAfx.cpp, shadowmap.dsp, shadowmap.dsw**: 这些文件是项目的主要组成部分,它们分别包含了项目框架、基本绘制操作、GLSL相关的自定义函数、阴影映射的具体实现、摄像机...
《newgateway-xdh-map-master_newgateway_xdh底图深色_地图插件_xdh-Map_》是一款专为newgateway框架设计的高级地图插件,旨在提供深色风格的底图,增强用户在视觉上的体验。这个插件适用于那些希望在自己的应用中...
7. **配置环境变量**:对于高级用户,可能需要配置环境变量以确保GeoMap4.0能正确找到其库文件和配置文件。但这通常不是必需的,只有在遇到特定问题时才需要手动设置。 8. **等待安装完成**:安装过程可能需要几...
在本文中,我们将深入探讨如何使用Windows Template Library (WTL) 实现自定义控件以创建具有图片功能的用户界面。WTL 是一个轻量级的C++库,它为开发Windows应用程序提供了一种高效的方法,特别是对于创建桌面应用...
此外,虽然这个自定义Map类实现了基本的功能,但它没有考虑到一些高级特性,如迭代器、弱引用键或处理键值对的迭代操作。如果你需要这些特性,可以扩展这个类以支持它们。 总之,自定义JavaScript Map类提供了一种...
SVG(Scalable Vector Graphics)是一种基于XML的矢量图像格式,它允许开发者创建可缩放的、清晰的图形,无论放大多少倍都...在Android Studio中,结合SVG库和自定义View,我们可以实现这种高级功能,提升用户体验。
在实际应用中,`classMap`可能还有其他高级功能,如迭代器支持、类型检查、默认值设置等。对于大型项目,你可能还会考虑使用ES6的类语法来定义`ClassMap`,并利用`Symbol.iterator`来实现可迭代特性,使其更符合...
虽然基础功能可以通过检查器完成,但对性能优化或者特殊效果的需求,开发者可以通过编写自定义脚本来实现。例如,他们可以编写脚本来改变地图的光照效果、添加动态天气系统,或者实现复杂的碰撞检测机制。 至于...
`go-mapstructure`还支持一些高级特性,例如自定义解码器、错误处理、转换规则等。例如,我们可以为特定字段指定自定义的解码逻辑,或者为整数和浮点数之间的转换设置默认行为。此外,该库还提供了配置选项,用于...