`
liangjian103
  • 浏览: 172949 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java二维数组实现简单Map

阅读更多

这些天频繁的在使用二维数组,让我觉得二维数组要比Map更灵活多变,以前和别人提起“数据结构”总能听到有人问:“如果编程语言里没有HashMap,你能自己实现一个Map来用么?”。熟练了二维数组,今天我就来尝试实现一个最简单的Map吧,我没有参考网上的例子,也没去想数据结构书中是怎么讲的,纯粹的自己个一个设计方案,中途遇到很多问题,但还是逐个解决了,还有很多不足之处,希望大家能帮我指点指点,一起交流一下学术。好了,不多说了,还是第一次去实现Map这东西,先看代码吧~

package com.lj.test;

/**
 * 简单的Map实现,采用二维数组实现(MapNew<String,String>)
 * @author LiangJian
 * StartTime:2011-6-22 10:31:25
 * EndTime:2011-6-22 17:46:15 
 */
public class MapNew {
	
	private int index = 0; 
	private String[][] map_tmp,map= null;

	/**
	 * 存储数据(如果Key值重复,则会被覆盖掉)
	 * @param k key值
	 * @param v value值
	 */
	public void put(String k,String v){
		map_tmp = getAddSize(map_tmp,index+1);//(每次增加一条数据就创建一个指定长度的新数组,并将数据拷贝进去)
		map = getAddSize(map,index+1);//将数组空间增加一条存储位置,用于下面存储一条新数据。
		boolean flag = isRepeat(map, k, v);//查看是否重复,如果重复则直接替换新的Value值
		if(!flag){
			map_tmp[index][0] = k;
			map_tmp[index][1] = v;
			index++;
			//插入一条新的数据,拷贝到新数组中。从倒数第2条位置插入到倒数第2条索引位置1条数据。
			System.arraycopy(map_tmp, map.length-1, map, map.length-1, 1);
		}
	}
	
	/**
	 * 通过Key值获取数据
	 * @param key key值
	 * @return
	 */
	public String get(String key){
		String value = null;
		for(int i=0;i<map.length;i++){
			if(key.equals(map[i][0])){
				value = map[i][1];
				break;
			}
		}
		return value;
	}
	
	/** Map总长度 */
	public int size(){
		return map.length;
	}
	
	/**
	 * 增加二维数组的存储空间,数据不变
	 * @param map 要增长的数组
	 * @param length 新的长度 
	 * @return
	 */
	public String[][] getAddSize(String[][] map,int length){
		if(map ==null) map = new String[1][2];//创建单条数据数组长度
		String[][] tmp = new String[length][2];//创建新的数组
		System.arraycopy(map, 0, tmp, 0, map.length);//将原始数据拷贝到新的数组中
		map = null;//不需要了,等待自动垃圾回收
		return tmp;
	}
	
	/**
	 * 查看是否有重复key,如果已有则覆盖相应Value
	 * @param s 模拟Map的二维数组
	 * @param k key值
	 * @param v value值
	 * @return 如果有重复值,则返回true,否则返回false;
	 */
	public boolean isRepeat(String[][] s,String k,String v){
		boolean flag = false;
		for(int i=0;i<s.length;i++){
			if(k.equals(s[i][0])){//查看是否存在此Key值
				s[i][1] = v;//使用新的Value值
				flag = true;
				break;
			}
		}
		return flag;
	}	

	public static void main(String[] args) {
		for(int i=0;i<=0;i++){
		MapNew map = new MapNew();
		map.put("username"+i, "LiangJian"+i);
		map.put("username"+i, "LiangJian555重复的Key值插入"+i);
		map.put("password"+i, "123456"+i);
		map.put("sex"+i, "男"+i);
		map.put("qq"+i, "15141739"+i);
		
		String username = map.get("username"+i);
		String password = map.get("password"+i);
		String sex = map.get("sex"+i);
		String qq = map.get("qq"+i);
		
		System.out.println("---------<"+i+">---------");
		System.out.println("username:"+username);
		System.out.println("password:"+password);
		System.out.println("sex:"+sex);
		System.out.println("qq:"+qq);
		System.out.println("-------------------");
		System.out.println("Map长度:"+map.size());
		}
		
		
	}

}
 
1
1
分享到:
评论
1 楼 chuanwang66 2011-06-23  
建议用红黑树实现^_^

相关推荐

    java 遍历Map及Map转化为二维数组的实例

    主要介绍了java 遍历Map及Map转化为二维数组的实例的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下

    java初学者必看

    6.2.3 二维数组的空间模型 6.2.4 二维数组的使用 6.3 数组操作 6.3.1 排序数组 6.3.2 查找 6.3.3 复制数组 6.3.4 填充数据 6.3.5 比较数组 6.4 实例:杨辉三角 6.5 本章习题 第7章 对象与类 7.1 面向对象...

    java培训机构内部预习文档

    数组 一维数组、数组参数、数组返回值、数组增删、扩容、排序、二维数组 chp6.面向对象 类和对象、实例变量、构造方法、方法重载、引用的概念、this关键字 chp7.面向对象三大特性 封装、继承、多态、对象创建过程、...

    Java连接数据库 JDBC封装类 带使用例子

    Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。

    Java推箱子的设计流程和实现要点

    地图类(Map): 包含二维数组表示地图格子,每个格子可能是空地、墙壁、箱子、目标位置或者是玩家角色。需要定义移动规则和碰撞检测方法。 角色类(Player): 表示搬运工,具有位置属性和移动方法,只能在空地上...

    每天一篇javascript学习小结(Array数组)

    1、数组常用方法 var colors = ["red", "blue", "green"]; //creates an array with three strings alert&#40;...2、数组map()方法   var numbers = [1,2,3,4,5,4,3,2,1]; var mapResult = n

    Java 入学考试题

    1、假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。经理也是员工,除了含有...7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。

    JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子

    Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类...

    java内部学习笔记.docx

    3.18二维数组和对象数组 28 3.19其他注意事项 28 Java SE核心I 30 4.1 Object类 30 4.2 String类 31 4.3 StringUtils类 33 4.4 StringBuilder类 33 4.5正则表达式 34 4.6 Date类 35 4.7 Calendar类 35 4.8 ...

    java基础案例与开发详解案例源码全

    4.3.3 二维数组111 4.4 经典算法113 4.4.1 算法-冒泡排序113 4.4.2 插入排序115 4.5 增强for循环116 4.6 本章练习117 第5章 5.1 面向过程的设计思想120 5.2 面向对象的设计思想120 5.3 抽象121 5.3.1 对象的理解121 ...

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    TiledMapInfoExport:将平铺的地图编辑器(TMX)文件信息导出到json文件

    方便其他工具读取对应的自定义属性使用方法java -jar TilemapInfoExport.jar **TileMapPath** **ExportPath**like:java -jar TilemapInfoExport.jar C:\tilemap01.tmx E:\out\output.jsonOverviewTile

    java范例开发大全源代码

     实例67 二维数组的创建与使用 92  实例68 矩阵转置 93  实例69 奇数阶幻方 94  实例70 求方阵对角线之和 96  实例71 矩阵的加法 97  实例72 矩阵的减法 98  实例73 快递报价单 99  5.3 数组...

    Java范例开发大全 (源程序)

     实例67 二维数组的创建与使用 92  实例68 矩阵转置 93  实例69 奇数阶幻方 94  实例70 求方阵对角线之和 96  实例71 矩阵的加法 97  实例72 矩阵的减法 98  实例73 快递报价单 99  5.3 数组的排序 ...

    java范例开发大全

    实例67 二维数组的创建与使用 92 实例68 矩阵转置 93 实例69 奇数阶幻方 94 实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 ...

    java编程基础,应用与实例

    6.4 二维数组 91 6.5 三维数组 95 6.6 巩固练习 97 第7章 对象与方法 99 7.1 对象的创建与销毁 99 7.2 值传递调用 102 7.3 引用传递调用 103 7.4 获取命令行参数 105 7.5 返回对象引用 106 7.6 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例043 将二维数组中的行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例...

Global site tag (gtag.js) - Google Analytics