`

自己编写一个Map

 
阅读更多
在爱酷学习网上学习Java视频,其中有一个自己实现map的功能,这里记录一下如何实现
package com.jbx.hash;
/**
 * 自定义实现Map的功能 不完美的原因是for循环影响效率
 * @author Administrator
 *Map:存放键值对,根据键对象找对应的值对象,键不能重复
 */
public class SxtMap001 {
	
	SxtEntry[] arr = new SxtEntry[990];
	int size;
	public void put(Object key,Object value){
		SxtEntry e = new SxtEntry(key,value);
		//解决键值唯一的问题
		for (int i=0;i<size; i++){
			if(arr[i].key.equals(key)){
				arr[i].value = value;
				return ;
			}
			
		}
		arr[size++] = e;
	}
	public Object get(Object key){
		for (int i = 0; i < size; i++) {
			if(arr[i].key.equals(key)){
				return arr[i].value;
			}
		}
		return null;
	}
	public boolean containsKey(Object key){
		for(int i =0;i<size;i++){
			if(arr[i].key.equals(key)){
				return true;
			}
		}
		return false;
	}
	public boolean containsValue(Object value){
		for(int i =0;i<size;i++){
			if(arr[i].value.equals(value)){
				return true;
			}
		}
		return false;
	}
	public static void main(String[] args) {
		SxtMap001 m = new SxtMap001();
		m.put("1", "你好");
		m.put("2", "拜拜");
		m.put("2", "拜拜拜");
		System.out.println(m.get("2"));//拜拜拜
		System.out.println(m.containsKey("1"));//true
		System.out.println(m.containsValue("拜拜"));//false
		System.out.println(m.containsValue("拜拜"));//false
		System.out.println(m.get("2"));//拜拜拜
	}
	
}

class SxtEntry{
	Object key;
	Object value;
	public SxtEntry(Object key, Object value) {
		super();
		this.key = key;
		this.value = value;
	}
	
}
分享到:
评论
1 楼 幻影寒狼 2017-10-30  
for循环优化
import java.util.LinkedList;  
  
/** 
 *  
 * Map:存放键值对,根据键对象找对应的值对象,键不能重复 
 * Map底层实现:数组+链表,每个对象都有对应的hashCode值,将hashCode取余,分区间片段进行存储,片段以链表的形式进行存储 
 * 知识拓展:两个内容相同的对象应该具有相等的hashcodes,反之,则不然。 
 * 
 */  
public class MyHashMap {  
    private LinkedList[] arr = new LinkedList[999];// Map底层实现:数组+链表  
    private int size;  
  
    public int size() {  
        return this.size;  
    }  
  
    //插入  
    public void put(Object key, Object value) {  
        MyEntry e = new MyEntry(key, value);  
        int hash = key.hashCode();  
        hash = hash < 0 ? -hash : hash;//hashCode可能出现负值  
        int a = hash % arr.length;  
        if (arr[a] == null) {  
            LinkedList list = new LinkedList();  
            list.add(e);  
            arr[a] = list;  
        } else {  
            LinkedList list = arr[a];  
            for (int i = 0; i < list.size(); i++) {  
                MyEntry myEntry = (MyEntry) list.get(i);  
                if (myEntry.key.equals(key)) {  
                    myEntry.value = value;// 键值重复,直接覆盖  
                    return;  
                }  
            }  
            arr[a].add(e);  
        }  
  
    }  
}  
  
//仿写键值对  
class MyEntry {  
    Object key;  
    Object value;  
  
    public MyEntry(Object key, Object value) {  
        super();  
        this.key = key;  
        this.value = value;  
    }  
}  

相关推荐

    用C# MapObject编写的一个GIS程序

    在“用C# MapObject编写的一个GIS程序”中,开发者已经实现了以下几个关键功能: 1. **添加Shp文件**:程序能够读取并加载Shp文件,将其中的地理数据渲染到地图上。这涉及到对MapObject库的API调用,如`IMapServer....

    编写函数map(arr) 把数组中的每一位数字都增加30%

    基础小白

    嵌套Map或者List获取key、value值

    例如,我们可以有一个用户信息的Map,其中键是用户ID,而对应的值是一个包含用户名、邮箱等信息的另一个Map。 ```java Map, Map, String&gt;&gt; users = new HashMap(); ``` 获取嵌套Map的key和value通常涉及两个步骤:...

    Map (c++实现的简易map)

    在C++标准库中,`Map`被实现为`std::map`,但在这个场景中,我们讨论的是一个用户自定义的简易`Map`实现,名为"MyMap",这是在Visual Studio 2013环境下编写的。 自定义`Map`的主要目的是为了学习和理解数据结构的...

    查询返回Map

    开发者会编写一个Controller方法,该方法会执行SQL查询,如使用JDBC、MyBatis或Hibernate等持久层框架。查询结果通常是多个行,每一行可以映射为一个Map,键可能是数据库字段名,值则是对应字段的值。 例如,使用...

    cubemap,立方体映射

    在描述中提到的项目,是使用OpenGL库在Visual C++ 6.0环境下编写的,这是一个古老的但仍然广泛使用的编程环境,用于开发图形密集型应用程序。在这个项目中,开发者创建了六个图像,分别代表立方体的六个面:button、...

    Gamma_MAP对SAR影像滤波

    一种很好的SAR图像的滤波方法,效果很好的,matlab编写的函数文件,简单好用。

    C#编写的Google Map客户端的例子,对使用Google Map有很好的帮助

    很多人都知道Google Map,但是在使用时都需要在Web上使用,程序是使用C#开发的本地使用Google Map的客户端程序,同时具备数据库,Google Map显示的标记以及标记信息完全存放在本地数据库中,单击数据库中的信息,...

    快速清理计算机内存垃圾的脚本-RAMMap

    RAMMap是一个由Mark Russinovich开发的实用程序,他是Microsoft Sysinternals套件的一部分,这个套件提供了丰富的系统分析和故障排除工具。 描述中的“解压打开后一键清理电脑垃圾,缓存垃圾,内存碎片等,电脑提速...

    groovy中map的基本操作1

    此外,可以使用`putAll(map2)`方法将一个Map的所有键值对复制到另一个Map中,如`explicitMap = new TreeMap(); explicitMap.putAll(map)`。 比较Map是否相等,可以使用`==`运算符,它会检查两个Map的键值对是否完全...

    map工具,分析linux生產的map文件

    1. **nm命令**:nm是一个用于显示对象文件或库中符号信息的工具,可以与map文件结合使用,查看特定地址对应的函数或变量。 2. **objdump**:objdump可以用来解码各种二进制文件格式,包括显示内存映射信息,辅助分析...

    读取properties文件返回map

    `Properties`类本身就是一个`Map`,可以直接通过`entrySet()`方法访问键值对。但如果你需要一个标准的`Map, String&gt;`,可以进行转换: ```java Map, String&gt; map = new HashMap(); for (Map.Entry, Object&gt; ...

    Java xml转化为map

    如果一个元素有多个属性,这些属性将以某种形式(例如属性对象或属性Map)存储。如果元素有子元素,子元素将成为嵌套的Map或者List。 要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for ...

    GeoMap4.0安装包

    9. **启动GeoMap4.0**:安装完毕后,桌面通常会生成一个GeoMap4.0的快捷方式。点击这个图标,即可启动软件并开始使用。 10. **激活与注册**:如果你的GeoMap4.0版本需要许可证,那么在首次运行时可能需要输入序列号...

    C++调用GOOGLEMAP代码

    文件名 "googl map" 可能是一个源代码文件或者资源文件,包含了与Google Maps集成相关的函数、类或配置信息。在C++中,这可能是一个.cpp文件,包含具体的API调用代码,或者是头文件(.h),定义了相关接口。 具体实现...

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

    在C++编程中,`std::map`和`std::unordered_map`是两种常见的关联容器,它们都用于存储键值对,但实现机制和性能特点有所不同。本篇文章将深入探讨这两种容器在插入、遍历和查找操作上的差异,并通过实例分析它们...

    DSP实验报告—实验3 编写一个以汇编(ASM)语言为基础的DSP程序

    【DSP实验报告—实验3 编写一个以汇编(ASM)语言为基础的DSP程序】 在数字信号处理(DSP)领域,汇编语言是不可或缺的一部分,尤其在优化关键算法性能时。本实验旨在让学生掌握汇编语言编程的基本技能,了解与C语言...

    TSK_wafer map转换易语言源码

    总的来说,"TSK_wafer map转换易语言源码"是一个实用的工具,通过易语言的编程实现,简化了TSK-MAP文件的分析过程。源码的开放性使得用户可以根据自己的需求进行二次开发和改进,对于学习易语言和提升晶圆测试领域的...

    mapserver+java 配置及实例,网上项目报错已修改

    在Java环境中调用MapServer,通常会利用MapScript库来实现,这是一个允许编程语言与MapServer进行交互的接口。本实例主要探讨如何在Java项目中配置和使用MapServer,以及解决配置过程中遇到的问题。 首先,我们需要...

    jaxb xml 转map

    3. 创建Map:创建一个`java.util.HashMap`或其他类型的Map,用来存储XML节点的键值对。 4. 将节点添加到Map:遍历过程中,将节点名称作为键,节点内容作为值放入Map中。如果有属性,可以将属性名和属性值作为二级...

Global site tag (gtag.js) - Google Analytics