`
liangjian103
  • 浏览: 177528 次
  • 性别: 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 遍历 Map 及将其转化为二维数组非常简单。无论是使用 keySet() 方法还是 entrySet() 方法,我们都可以轻松地实现这种操作。

    计算机软件-商业源码-二维数组,映射类.zip

    在计算机编程中,二维数组和映射类是两种非常重要的数据结构,它们在软件开发中扮演着关键角色,尤其在处理复杂数据组织和算法实现时。这个“计算机软件-商业源码-二维数组,映射类.zip”压缩包很可能是包含了一些...

    Java中动态地改变数组长度及数组转Map的代码实例分享

    在这个例子中,我们使用了Apache Commons Lang库的 `ArrayUtils.toMap()` 方法,该方法接受一个二维数组,并将其转换为一个Map。在 `main()` 方法中,我们创建了一个包含国家和首都的二维字符串数组,然后将其转换为...

    Java程序设计:5 数组与字符串.part3.ppt

    在Java中,数组分为一维数组和二维数组。本章主要讲解了数组的定义、创建、初始化、访问以及操作算法,如排序和查找。 1. 数组的定义与创建: - 一维数组的声明方式为:类型[] 数组名; - 二维数组的声明可以有...

    在javascript中,如果删除二维数组中重复的元素

    如果不存在,则将其添加到Map中,这样我们最终得到的就是去除了重复子数组的二维数组。 然而,上述方法可能会遇到比较复杂的问题,比如数组中包含了对象或其他引用类型的数据时,简单地转换成字符串可能并不能有效...

    java 课件 数组、枚举及注解

    ` 创建一个3行4列的二维数组。 6.3 访问数组 访问数组元素通过索引完成,索引从0开始。例如,`Array[0]` 访问数组的第一个元素。数组也可以通过循环进行遍历。 6.5 枚举 枚举(enum)是Java 5引入的特性,用于...

    Java程序设计 3 数组与集合.pptx

    二维数组 * Java中的二维(多维)数组是特殊的一维数组 * 二维定义与初始化 * int tmp[][]; * tmp = new int[2][3]; * tmp = { {1, 2}, {3, 4}, {5, 6} } Arrays类 * Arrays类中定义了5种类型的方法: * asList...

    java中数组list map三者之间的互转介绍

    对于二维数组,可以将其视为两个一维数组,分别处理。如: ```java String[][] ss = {{"a", "b", "e"}, {"c", "d", "f"}}; Map, String&gt; map = new HashMap(); for (int i = 0; i ; i++) { map.putAll(MapUtils...

    jdk8新特性.md

    并行数组 并行流利用多核处理器的优势,可以自动并行处理数据,提高程序性能。 - **示例**: ```java int[] array = IntStream.rangeClosed(1, 1000000).toArray(); int sum = Arrays.stream(array).parallel...

    节 数组字符串及容器类PPT学习教案.pptx

    1. 二维数组声明的格式为`数组元素类型 数组名 [][]`或`数组元素类型 [][] 数组名`。 2. 初始化二维数组同样有静态和动态两种方式。静态初始化示例为`int int_array[][] = {{1,1,1},{2,2,2},{3,3,3}}`;动态初始化...

    java常见函数实验

    在Java中,创建二维数组的语法是`类型[][] arrayName = new 类型[行数][列数]`。实验要求创建的二维数组为`{ {1, 2, 3}, {2, 3}, {3, 4, 5, 6} }`,可以通过双重循环遍历并打印数组元素。 2. **随机数生成与List...

    java游戏开发--连连看2-实现游戏算法.doc

    在Java游戏中开发连连看2的过程中,实现...总的来说,连连看游戏的算法实现涉及了数据结构(如二维数组)、随机数生成、数组操作以及搜索算法。通过精心设计这些部分,可以创建出一个既有趣又有挑战性的连连看游戏。

    hdoj解题笔记1

    在Java中,实现类似功能可以使用二维数组或ArrayList的ArrayList来存储地图,DFS的实现方法不变,只是语法会有所不同。 4. **问题分析**:解题的关键在于理解“相邻”的定义,以及如何有效地遍历地图。DFS在这里...

    java实现多层嵌套循环参数转换

    例如,如果你有一个二维数组或树形结构,你可以用两层`for`循环来遍历所有的元素。以下是一个简单的两层嵌套循环示例: ```java for (int i = 0; i ; i++) { for (int j = 0; j [i].length; j++) { System.out....

    java游戏简单实现

    在Java中,我们可以用二维数组或者对象网格来表示地图,每个位置对应一个格子,格子内存储地形类型或其他信息。例如,`Map`类可以有一个二维的`Tile[][]`数组,每个`Tile`对象包含地形属性(如是否可通行)。 3. **...

    java集合应用开发

    通过合理利用Java集合框架提供的数据结构,如列表和二维数组,我们可以极大地简化数据处理流程,提高程序的可读性和维护性。本示例代码展示了如何将数据库查询结果转换为Java集合,并最终在用户界面上展示出来,这...

    java行转列的例子

    - 对于多列数据,可能需要创建一个二维数组或使用ArrayList来存储。 5. 数据库操作: - 如果数据来自数据库,可能需要使用JDBC或其他ORM框架(如Hibernate、MyBatis)来执行SQL查询。 - 数据库查询结果通常以...

    (java )rpg教程

    该项目通过使用`Java Swing`库创建了一个简单的游戏地图界面,并展示了如何利用二维数组来表示地图结构。 #### 二、核心知识点详解 ##### 1. 项目结构与组件介绍 - **Example1.java**: - **功能**:主窗口类,...

Global site tag (gtag.js) - Google Analytics