- 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实现向购物车添加删除修改商品,显示商品信息
hashmap的底层及源码解析,很适合大家的学习,不要积分。
Java基础-模拟HashMap集合(基于数组和链表) 数组和链表.pdf
javaScript模拟的HashMap数据结构,可以方便的put和get。几乎和Java中HashMap类的功能一模一样。非常好用的!
hashmap的C++实现,对于学习C++方面的很有用
hashmap实现原理.pdf
用js代码实现java中hashmap 的所有功能
用hashmap结构将字典文件中的词条装入内存,并基于该结构进行查询
1. 用HashMap模拟一个网上购物车。要求:从键盘输入5本书的名称、单价、购买数量,将这些信息存入一个HashMap,然后将该HashMap作为参数调用方法getSum(HashMap books),该方法用于计算书的总价并返回。【说明:...
HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...
listview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmaplistview实现,hashmap
C语言实现hashMap,包含创建hashMap、插入hashMap、查找hashMap、删除hashMap,已经若干经典的hash函数。文章链接:https://blog.csdn.net/sxf1061700625/article/details/109594495
Javascript实现和操作HashMap,压缩包里面有hashmap定义和操作的例子
基于HashMap的用户标签处理兼Java中HashMap实现原理研究
NULL 博文链接:https://mox-sir.iteye.com/blog/2124644
HashMap的实现原理
用数据结构的思想实现java中的类hashmap
主要介绍了深入解析java HashMap实现原理的相关资料,需要的朋友可以参考下
HashMap源码实现红黑树添加元素和删除元素