- 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()); } }
相关推荐
在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它来存储、管理和检索数据。此外,我们还将学习如何使用`...
以下是一个简单的示例,展示了如何用HashMap实现枚举功能: ```java import java.util.HashMap; import java.util.Map; public class GenericEnum { private static final Map, EnumItem> ENUM_MAP = new 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 += ...
FIFO是最简单的页面替换算法,它的基本思想是按照页面进入内存的顺序来淘汰页面。当需要替换页面时,会选择最早进入内存的页面进行淘汰。FIFO易于实现,但效率并不高,因为它不考虑页面的使用频率,可能导致频繁访问...
总之,这个Java实现利用HashMap和自定义的`GoodsBean`类,构建了一个简单的购物车系统,展示了如何在CS(Client-Server)架构中处理用户的购物行为,并与数据库进行交互存储和检索商品信息。通过这种方式,开发者...
这个类使用了JavaScript对象来模拟HashMap的存储结构,其中对象的属性名作为键(key),属性值作为值(value)。 具体实现细节包括: - `this.size`:用于获取当前HashMap中键值对的数量。 - `this.clear`:用于...
本文通过实例代码详细介绍了如何在JavaScript中实现一个简易的HashMap,并解释了每个方法的作用和实现方式。这些基本操作为处理键值对数据提供了强大的工具。希望这篇文章能够帮助到需要在JavaScript中操作键值对...
以上代码提供了一个简单的`BeanFactory`实现,它使用HashMap存储bean并提供getBean()方法获取bean。注入依赖的部分仅考虑了字段注入,并且假设存在一个`Inject`注解来标记需要注入的依赖。 虽然这是一个简化的示例...
为了模拟HashMap的行为,我们定义了一个名为`Jb`的类。这个类包含以下关键属性和方法: - **arr**:二维数组,用于存储键值对数据。 - **arr_len**:表示键值对的数量。 - **putv**:用于添加或更新键值对。 - **...
在本项目"Java基础实现--模拟QQ项目"中,我们主要关注的是如何使用Java编程语言的基本概念和技术来创建一个简单的即时通讯应用,类似QQ。这个项目不涉及数据库操作,因此重点在于逻辑处理和用户交互。以下是一些核心...
在Java中,我们可以利用现有的数据结构,如ArrayList、HashMap或者自定义的数据结构来模拟DataTable的功能。例如,可以创建一个类,包含一个ArrayList来保存行数据,每一行又可以由一个HashMap表示,键为列名,值为...
在提供的压缩文件“操作系统20152027页面置换模拟”中,可能包含了实现上述模拟的源代码、实验报告和可能的数据输入样本。源代码部分,开发者可能使用了Java的ArrayList或者LinkedList作为基础数据结构,结合HashMap...
在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...
7. **Swing图形界面编程**:创建窗口,添加组件,实现事件监听,构建简单的GUI应用程序。 8. **基本算法和数据结构**:排序(冒泡、选择、插入、快速、归并等)、查找(顺序、二分等)、栈、队列、链表等。 9. **...
可以使用HashMap实现快速查找和遍历元素。 (9)递归列出目录下所有文件与删除目录下所有文件 使用Java编程语言可以实现递归列出目录下所有文件,并删除目录下所有文件。可以使用File类和递归方法实现该功能。 ...
本项目是一个简易的RPC(远程过程调用)框架,旨在通过模拟实现一个基本的RPC调用流程,帮助理解RPC的核心概念和实现原理。服务端采用Tomcat服务器,消费端使用HTTP协议发送网络请求,通过本地HashMap模拟服务注册...
你可以暂时模拟存储,例如使用HashMap来保存用户信息。 4. **反馈结果**: 注册成功后,跳转到成功页面;失败则返回错误信息,让用户重新输入。 ### 五、实现用户登录 1. **登录表单**: 创建登录界面,包含用户名和...
首先,我们来看一个简单的HashMap实现: ```javascript var hashMap = { Set: function(key, value) { this[key] = value; }, Get: function(key) { return this[key]; }, Contains: function(key) { return ...
文件的权限管理也是重要的一部分,虽然在简单的DOS模拟中可能并不复杂,但理解如何控制对文件的读、写和执行权限仍然是有价值的。 总的来说,这个Java项目为学习文件系统提供了很好的实践机会,同时也涵盖了面向...
在本项目中,"IO模拟数据库图书管理系统"是专为Java初学者设计的一个实践项目,旨在帮助学习者理解和掌握Java的输入输出(IO)操作,同时实现简单的图书管理功能。这个系统模仿了真实数据库的工作原理,尽管没有使用...