`

自己编写一个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程序

    这程序应用了MapObject,对Shp文件实现了添加,放大,缩小,鹰眼图,还有DragFeedback等功能。

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

    基础小白

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

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

    stl_map.rar_STL 自己_STLmap_lips62k

    自己编写了STL库的map,供大家学习讨论

    xml2map:XML到MAP转换器的Golang编写

    XML到MAP转换器的Golang编写的转换器 有时需要表示以前未知的结构。 这种通用表示形式通常是JSON,XML或数据映射结构形式的字符串。 类似于map [string] interface {}或map [interface {}] interface {}。 这是从...

    C++ map 统计字符个数

    使用C++编写的统计字符个数的程序,使用到了map。开发环境VS 2012

    map(java).rar_ map ja_MAP JAVA_java map_java系统_map

    应用JAVA编写的网络MAP系统,可以方便用户建立自己的地图网络系统!

    stdf2map:用Python编写的STDF到Wafer Bin Map实用程序

    stdf2map是一个基于python的轻量级命令行应用程序,用于从半导体行业中使用的自动测试设备(ATE)创建的行业标准STDF数据文件中生成外观合理的Bin晶圆图。 特征 支持STDF文件中的多个晶片 处理同一晶圆上的芯片的多...

    自定义javascript的Map类

    自定义javascript的Map类,使用习惯完全依据于java的map使用习惯编写,java中map的用法基本一样,导入包即可使用

    GoMap-3D Map for AR Gaming

    GO Map是基于unity 3D的基于位置的游戏的动态地图SDK。 每个设置和图形控件都可以直接从检查器中进行自定义,而不需要编写任何代码。

    TreeMap<K,V>类以及LinkedList<E>

    有集合A={1,2,3,4}和B={1,3,7,9,11},编写一个应用程序输出A和B交集、并集和差集 7_5.有10个硬盘,有两个重要的属性:价格和容量。编写一个应用程序,使用TreeMap,V&gt;类,分别按照价格和容量排序并输出10个硬盘的...

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

    解压打开后一键清理电脑垃圾,缓存垃圾,内存碎片等,电脑提速30%-50%

    实验05 Java集合.doc

    1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证...

    STL测试程序map的使用方法

    使用VC++控制台程序编写,使用map对多元obj按规定单元的大小进行排序

    MAP 文件认识初步

    主要介绍了基于 ARM 核微处理器工程编译连接生成的 MAP 文件 结构、内容,简单分析工程各组成元素和生成的映象文件之间的关系。...分析说明 MAP 文件,并浅谈 MAP 文件对编写代码的作用,认识怎样编写嵌入式系统软件。

    mapserver 安装程序

    mapserver 安装程序,包含web页面的简单编写,地图放大缩小等功能,mapinfo的编写等

    MapServer之MapFile文件配置介绍

    MapFile文件时MapServer的基本配置文件,这篇由jean-francois doyon and jeff McKenna 编写的文档可以让你对MapFile文件有一个很好的认识。

    map与Javabean相互转换实例

    基本介绍使用反射将普通Javabean与map集合的相互转换实例,项目开发时编写自己的转换帮助类,更好满足开发时所需

    ADS map文件分析

    本文系网上资源,主要介绍了基于ARM核微处理器工程编译产生的MAP文件结构、内容,简单分析工程各组成元素和生成的映象...通过实际例子分析说明MAP文件,并浅谈MAP文件对编写代码的作用,认识怎样编写嵌入式系统软件。

    Python Map 函数的使用

    map()是一个 Python 内建函数,它允许你不需要使用循环就可以编写简洁的代码。 一、Python map() 函数 这个map()函数采用以下形式: map(function, iterable, ...) 它需要两个必须的参数: function – 针对每一...

Global site tag (gtag.js) - Google Analytics