这些天频繁的在使用二维数组,让我觉得二维数组要比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());
}
}
}
分享到:
相关推荐
"java 遍历Map及Map转化为二维数组的实例" ...通过上面的示例代码,我们可以看到,使用 Java 遍历 Map 及将其转化为二维数组非常简单。无论是使用 keySet() 方法还是 entrySet() 方法,我们都可以轻松地实现这种操作。
在计算机编程中,二维数组和映射类是两种非常重要的数据结构,它们在软件开发中扮演着关键角色,尤其在处理复杂数据组织和算法实现时。这个“计算机软件-商业源码-二维数组,映射类.zip”压缩包很可能是包含了一些...
在这个例子中,我们使用了Apache Commons Lang库的 `ArrayUtils.toMap()` 方法,该方法接受一个二维数组,并将其转换为一个Map。在 `main()` 方法中,我们创建了一个包含国家和首都的二维字符串数组,然后将其转换为...
在Java中,数组分为一维数组和二维数组。本章主要讲解了数组的定义、创建、初始化、访问以及操作算法,如排序和查找。 1. 数组的定义与创建: - 一维数组的声明方式为:类型[] 数组名; - 二维数组的声明可以有...
如果不存在,则将其添加到Map中,这样我们最终得到的就是去除了重复子数组的二维数组。 然而,上述方法可能会遇到比较复杂的问题,比如数组中包含了对象或其他引用类型的数据时,简单地转换成字符串可能并不能有效...
` 创建一个3行4列的二维数组。 6.3 访问数组 访问数组元素通过索引完成,索引从0开始。例如,`Array[0]` 访问数组的第一个元素。数组也可以通过循环进行遍历。 6.5 枚举 枚举(enum)是Java 5引入的特性,用于...
二维数组 * Java中的二维(多维)数组是特殊的一维数组 * 二维定义与初始化 * int tmp[][]; * tmp = new int[2][3]; * tmp = { {1, 2}, {3, 4}, {5, 6} } Arrays类 * Arrays类中定义了5种类型的方法: * asList...
对于二维数组,可以将其视为两个一维数组,分别处理。如: ```java String[][] ss = {{"a", "b", "e"}, {"c", "d", "f"}}; Map, String> map = new HashMap(); for (int i = 0; i ; i++) { map.putAll(MapUtils...
并行数组 并行流利用多核处理器的优势,可以自动并行处理数据,提高程序性能。 - **示例**: ```java int[] array = IntStream.rangeClosed(1, 1000000).toArray(); int sum = Arrays.stream(array).parallel...
1. 二维数组声明的格式为`数组元素类型 数组名 [][]`或`数组元素类型 [][] 数组名`。 2. 初始化二维数组同样有静态和动态两种方式。静态初始化示例为`int int_array[][] = {{1,1,1},{2,2,2},{3,3,3}}`;动态初始化...
在Java中,创建二维数组的语法是`类型[][] arrayName = new 类型[行数][列数]`。实验要求创建的二维数组为`{ {1, 2, 3}, {2, 3}, {3, 4, 5, 6} }`,可以通过双重循环遍历并打印数组元素。 2. **随机数生成与List...
在Java游戏中开发连连看2的过程中,实现...总的来说,连连看游戏的算法实现涉及了数据结构(如二维数组)、随机数生成、数组操作以及搜索算法。通过精心设计这些部分,可以创建出一个既有趣又有挑战性的连连看游戏。
在Java中,实现类似功能可以使用二维数组或ArrayList的ArrayList来存储地图,DFS的实现方法不变,只是语法会有所不同。 4. **问题分析**:解题的关键在于理解“相邻”的定义,以及如何有效地遍历地图。DFS在这里...
例如,如果你有一个二维数组或树形结构,你可以用两层`for`循环来遍历所有的元素。以下是一个简单的两层嵌套循环示例: ```java for (int i = 0; i ; i++) { for (int j = 0; j [i].length; j++) { System.out....
在Java中,我们可以用二维数组或者对象网格来表示地图,每个位置对应一个格子,格子内存储地形类型或其他信息。例如,`Map`类可以有一个二维的`Tile[][]`数组,每个`Tile`对象包含地形属性(如是否可通行)。 3. **...
通过合理利用Java集合框架提供的数据结构,如列表和二维数组,我们可以极大地简化数据处理流程,提高程序的可读性和维护性。本示例代码展示了如何将数据库查询结果转换为Java集合,并最终在用户界面上展示出来,这...
- 对于多列数据,可能需要创建一个二维数组或使用ArrayList来存储。 5. 数据库操作: - 如果数据来自数据库,可能需要使用JDBC或其他ORM框架(如Hibernate、MyBatis)来执行SQL查询。 - 数据库查询结果通常以...
该项目通过使用`Java Swing`库创建了一个简单的游戏地图界面,并展示了如何利用二维数组来表示地图结构。 #### 二、核心知识点详解 ##### 1. 项目结构与组件介绍 - **Example1.java**: - **功能**:主窗口类,...