`

简单模拟一下HashMap的实现

阅读更多
  • hashMap的实现是由数组和链表,数据结构是"链表散列"

1.准备数据 实体类Info

package com.gwzan.map;

/**
 * 员工信息类
 * @author zan
 *
 */
public class Info {
	
	private String key;
	private String name;
	
	public Info(String key,String name){
		this.key=key;
		this.name=name;
	}
	
	
	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

 2.结点

package com.gwzan.map;

/**
 * 链接点 ,相当于是车厢
 * @author zan
 *
 */
public class Node {

	public Info info;  //数据域
    public Node next;  //指针域
    
    public Node(Info info){
    	this.info=info;
    }
    
}

 3.链表

package com.gwzan.map;
/**
 * 链表,相当于火车
 * @author zan
 *
 */
public class LinkList {

	private  Node  first;//头结点
	public LinkList(){
		first=null ;//初始化
	}
	
	/**
	 * 插入数据,在头结点之后进行插入
	 */
	public void insertFirst(Info info){
		Node node=new Node(info);
		node.next=first;
		first=node;	
	}
	
	/**
	 * 删除一个结点,在头节点后进行删除
	 */
	public Node deleteFirst(){
		Node tmp=first;
		first=tmp.next;
		return tmp;
	}
	
    
    /**
     * 查找方法
     */
    public Node find(String key){
    	Node current=first;
    	while (!key.equals(current.info.getKey())) {
			if (current.next==null) {
				return null;
			}
			current=current.next;
		}
    	
    	return current;
    }
    
    /**
     * 删除方法,根据数据域进行删除
     */
    public Node delete(String key){
    	Node current =first;
    	Node previous=first;
    	while (!key.equals(current.info.getKey())) {
			if (current.next==null) {
				return null;
			}
			previous=current;
			current=current.next;
		}
    	
    	if (current==first) {
    		first=first.next;
		}else {
			previous.next=current.next;
		}
    	return current;
    }
}

 

4.hashmap类

 

package com.gwzan.map;

import java.math.BigInteger;


/**
 * 哈希表——链地址法:
 * 哈希表每个单元设置链表,某个数据项的关键字还是像通常一样映射到哈希表的单元中,
 * 而数据项本身是插入到单元的链表中
 * @author zan
 *
 */
public class HashMap {

	private LinkList[] arr;
	
	public HashMap(){
		arr=new LinkList[100];
	}
	
	public HashMap(int maxsize){
		arr=new LinkList[maxsize];
	}
	
	/**
	 * 插入数据
	 * @param info
	 */
	public void insert(Info info){
		//获得关键字
		String key=info.getKey();
		//关键字所自定的哈希数
		int hashVal=hashCode(key);
		
		if (arr[hashVal]==null) {
			arr[hashVal]=new LinkList();
		}
		arr[hashVal].insertFirst(info);
	}
	
	/**
	 * 查找数据
	 */
	public Info find(String key){
		int hashVal=hashCode(key);
		return arr[hashVal].find(key).info;
	}
	
	/**
	 * 删除数据
	 */
	public Info delete(String key){
		int hashVal=hashCode(key);
		return arr[hashVal].delete(key).info;
	}
	
	//解决哈希冲突的
	public int hashCode(String key){
		BigInteger hashVal=new BigInteger("0");
		BigInteger pow27=new BigInteger("1");
		for (int i = key.length()-1; i >=0; i--) {
			int letter=key.charAt(i)-96;
			BigInteger letterB=new BigInteger(String.valueOf(letter));
			hashVal=hashVal.add(letterB.multiply(pow27));
			pow27=pow27.multiply(new BigInteger(String.valueOf(27)));
		}
		return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
	}
}

 

5.测试类

package com.gwzan.map;

public class TestHashMap {

	public static void main(String[] args) {
		//HashMap hashMap=new HashMap(10000);
		HashMap hashMap=new HashMap();
		hashMap.insert(new Info("a", "张三"));
		hashMap.insert(new Info("ct", "李四"));
		hashMap.insert(new Info("b", "王五"));
		
		
		System.out.println(hashMap.find("a").getName());
		System.out.println(hashMap.find("ct").getName());
		System.out.println(hashMap.find("b").getName());
		
		
		System.out.println(hashMap.hashCode("a"));
		System.out.println(hashMap.hashCode("ct"));
		
		System.out.println(hashMap.delete("b").getName());
		//System.out.println(hashMap.find("b").getName());
	}
}

 

0
0
分享到:
评论

相关推荐

    用HashMap模拟一个网上购物车

    在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它来存储、管理和检索数据。此外,我们还将学习如何使用`...

    枚举 HashMap

    以下是一个简单的示例,展示了如何用HashMap实现枚举功能: ```java import java.util.HashMap; import java.util.Map; public class GenericEnum { private static final Map, EnumItem> ENUM_MAP = new HashMap...

    一个基于js的HashMap

    以下是一个简单的JavaScript HashMap实现示例: ```javascript class HashMap { constructor(size = 53) { this.map = new Array(size); } hash(key) { let hash = 0; for (let i = 0; i ; i++) { hash += ...

    页面算法模拟(java实现)

    FIFO是最简单的页面替换算法,它的基本思想是按照页面进入内存的顺序来淘汰页面。当需要替换页面时,会选择最早进入内存的页面进行淘汰。FIFO易于实现,但效率并不高,因为它不考虑页面的使用频率,可能导致频繁访问...

    java实现运用hashmap充当购物车goodbean充当存放数据.docx

    总之,这个Java实现利用HashMap和自定义的`GoodsBean`类,构建了一个简单的购物车系统,展示了如何在CS(Client-Server)架构中处理用户的购物行为,并与数据库进行交互存储和检索商品信息。通过这种方式,开发者...

    javascript实现的HashMap类代码

    这个类使用了JavaScript对象来模拟HashMap的存储结构,其中对象的属性名作为键(key),属性值作为值(value)。 具体实现细节包括: - `this.size`:用于获取当前HashMap中键值对的数量。 - `this.clear`:用于...

    JS hashMap实例详解

    本文通过实例代码详细介绍了如何在JavaScript中实现一个简易的HashMap,并解释了每个方法的作用和实现方式。这些基本操作为处理键值对数据提供了强大的工具。希望这篇文章能够帮助到需要在JavaScript中操作键值对...

    简单模拟Spring的beanFactory

    以上代码提供了一个简单的`BeanFactory`实现,它使用HashMap存储bean并提供getBean()方法获取bean。注入依赖的部分仅考虑了字段注入,并且假设存在一个`Inject`注解来标记需要注入的依赖。 虽然这是一个简化的示例...

    ASP实现类似hashMap功能的类

    为了模拟HashMap的行为,我们定义了一个名为`Jb`的类。这个类包含以下关键属性和方法: - **arr**:二维数组,用于存储键值对数据。 - **arr_len**:表示键值对的数量。 - **putv**:用于添加或更新键值对。 - **...

    Java基础实现--模拟QQ项目

    在本项目"Java基础实现--模拟QQ项目"中,我们主要关注的是如何使用Java编程语言的基本概念和技术来创建一个简单的即时通讯应用,类似QQ。这个项目不涉及数据库操作,因此重点在于逻辑处理和用户交互。以下是一些核心...

    JAVA实现类似C#的DataTable数据结构_适用于安卓

    在Java中,我们可以利用现有的数据结构,如ArrayList、HashMap或者自定义的数据结构来模拟DataTable的功能。例如,可以创建一个类,包含一个ArrayList来保存行数据,每一行又可以由一个HashMap表示,键为列名,值为...

    操作系统页面置换模拟

    在提供的压缩文件“操作系统20152027页面置换模拟”中,可能包含了实现上述模拟的源代码、实验报告和可能的数据输入样本。源代码部分,开发者可能使用了Java的ArrayList或者LinkedList作为基础数据结构,结合HashMap...

    Java实现LRU算法.zip

    在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...

    二级Java上机模拟软件

    7. **Swing图形界面编程**:创建窗口,添加组件,实现事件监听,构建简单的GUI应用程序。 8. **基本算法和数据结构**:排序(冒泡、选择、插入、快速、归并等)、查找(顺序、二分等)、栈、队列、链表等。 9. **...

    Java基础实用知识库分享

    可以使用HashMap实现快速查找和遍历元素。 (9)递归列出目录下所有文件与删除目录下所有文件 使用Java编程语言可以实现递归列出目录下所有文件,并删除目录下所有文件。可以使用File类和递归方法实现该功能。 ...

    基于Java的简易RPC框架.zip

    本项目是一个简易的RPC(远程过程调用)框架,旨在通过模拟实现一个基本的RPC调用流程,帮助理解RPC的核心概念和实现原理。服务端采用Tomcat服务器,消费端使用HTTP协议发送网络请求,通过本地HashMap模拟服务注册...

    springMVC实现用户注册及登陆

    你可以暂时模拟存储,例如使用HashMap来保存用户信息。 4. **反馈结果**: 注册成功后,跳转到成功页面;失败则返回错误信息,让用户重新输入。 ### 五、实现用户登录 1. **登录表单**: 创建登录界面,包含用户名和...

    详解JavaScript中Hash Map映射结构的实现_.docx

    首先,我们来看一个简单的HashMap实现: ```javascript var hashMap = { Set: function(key, value) { this[key] = value; }, Get: function(key) { return this[key]; }, Contains: function(key) { return ...

    Java模拟DOS文件系统

    文件的权限管理也是重要的一部分,虽然在简单的DOS模拟中可能并不复杂,但理解如何控制对文件的读、写和执行权限仍然是有价值的。 总的来说,这个Java项目为学习文件系统提供了很好的实践机会,同时也涵盖了面向...

    IO模拟数据库图书管理系统

    在本项目中,"IO模拟数据库图书管理系统"是专为Java初学者设计的一个实践项目,旨在帮助学习者理解和掌握Java的输入输出(IO)操作,同时实现简单的图书管理功能。这个系统模仿了真实数据库的工作原理,尽管没有使用...

Global site tag (gtag.js) - Google Analytics