import java.util.AbstractCollection;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;/*** 简易HashMap* 数组 + 单向链表*/
public class MyHashMap {private Node[] table;private int size;private int initCapacity = 16;public MyHashMap() {table = new Node[initCapacity];}/*** hash表存放键值对个数* @return*/public int size() {return size;}/*** hash表是否为空* @return*/public boolean isEmpty() {return size == 0;}/*** 存放键值对* @param key* @param value* @return*/public boolean put(Object key, Object value) {int hash = Math.abs(key.hashCode()) % initCapacity;Node x = table[hash];if(x == null) {table[hash] = new Node(key, value, null);size++;return true;}else {Node n;for(n = x; n != null; n = n.next) {if(key.equals(n.key)) {n.value = value;return true;}x = n;}x.next = new Node(key, value, null);size++;return true;}}/*** 根据健获取值* @param key* @return*/public Object get(Object key) {int hash = Math.abs(key.hashCode()) % initCapacity;for(Node n = table[hash]; n != null; n = n.next) {if(key.equals(n.key)) {return n.value;}}return null;}/*** Hash迭代类*/class MyHashIterator{Node next;int index;public MyHashIterator() {index = 0;next = null;if(table != null && size > 0) {do {}while(index < table.length && (next = table[index++]) == null);}}public final boolean hasNext() {return next != null;}public final Node nextNode() {Node e = next;if((next = e.next) == null) {do {}while(index < table.length && (next = table[index++]) == null); }return e;}}/*** 返回键的Set集合* @return*/public Set<Object> MykeySet() {return new MyKeySet();}/*** 键的Set类*/final class MyKeySet extends AbstractSet<Object>{public Iterator<Object> iterator() {return new MyKeyIterator();}public int size() {return size;}}/*** 键的迭代类*/final class MyKeyIterator extends MyHashIterator implements Iterator<Object>{public Object next() {return nextNode().key;}}/*** 值的集合* @return*/public Collection<Object> values() {return new MyValues();}/*** 值的集合类*/final class MyValues extends AbstractCollection<Object>{public Iterator<Object> iterator() {return new MyValueIterator();}public int size() {return size;}}/*** 值的迭代类*/final class MyValueIterator extends MyHashIterator implements Iterator<Object>{public Object next() {return nextNode().value;}}
}/*** 节点类*/
class Node{Object key;Object value;Node next;public Node(Object key, Object value, Node next) {this.key = key;this.value = value;this.next = next;}
}

029_自己实现一个HashMap相关推荐

  1. hashmap赋值给另一个hashmap_图解设计一个 HashMap

    目前我们学到的数据结构有:单链表,双向链表,栈,队列,循环队列,双端队列.今天学习 LeetCode 的 「 706. Design HashMap 」,从设计一个 HashMap 到掌握其内部原理. ...

  2. java map存放班级和姓名_Java 创建一个HashMap对象,并在其中添加学生的姓名和成绩,键为学生姓名,值为学生成绩,使用增强for循环遍历该HashMap,并输出学生成绩。...

    |--需求说明 |--实现思路 1.使用map.containsKey()判断输入的姓名在不在map里面,如果在就打印 2.遍历全班姓名和成绩,需要创建Map.entry,然后在map.entry里面 ...

  3. 一个HashMap跟面试官扯了半个小时

    一个HashMap能跟面试官扯上半个小时 <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 一个volatile ...

  4. 手写实现一个HashMap

    手写实现一个HashMap 前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想 ...

  5. 靠一个HashMap的讲解打动了头条面试官,我的秘诀是

    最近收集了一份github标星81.6k的Java面试突击手册,文末查看 关注 转发+转发+转发 私信回复关键词 [学习]即可获取~ 预备知识 位运算知识 位运算操作是由处理器支持的底层操作,底层硬件 ...

  6. 一个HashMap对象所占内存的分析

    Map<Object, Object> map = new HashMap<>(); 日常写代码中,可能都不会关注这一行代码占了多少个内存,今天我们就来分析一下. 首先,map ...

  7. Java 创建一个HashMap对象,并在其中添加学生的姓名和成绩,键为学生姓名,值为学生成绩,使用增强for循环遍历该HashMap,并输出学生成绩。...

    |--需求说明 如题 |--实现思路 1.使用map.containsKey()判断输入的姓名在不在map里面,如果在就打印 2.遍历全班姓名和成绩,需要创建Map.entry,然后在map.entr ...

  8. 一个HashMap能跟面试官扯上半个小时

    一个HashMap能跟面试官扯上半个小时 <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 一个volatile ...

  9. float占几个字节_一个HashMap对象占多少字节?

    对象=对象头+成员变量+对齐填充 对象头结构:java对象在Heap里面的结构是这样的:对象头跟对象体,对象体跟C里面的结构体是一样的,对象头由两个域组成:用于存放hashcode.同步.GC的_ma ...

最新文章

  1. 关于StoneAge项目的敏捷
  2. 报告!我还有几个阿里同事也去了亚运会
  3. 单链表的C++实现(采用模板类)
  4. Even for transaction data request, metadata is still needed as prerequisite
  5. 05.序列模型 W1.循环序列模型
  6. dateutil 日期计算_日期时间 - 日期时间工具-DateUtil - 《Hutool 参考文档》 - 书栈网 · BookStack...
  7. SWFUpload多文件上传,文件大小增大问题
  8. python语言写九九乘法表_怎么使用Python语言写一个九九乘法表?
  9. 修改表和约束(alter语句)
  10. 依码仕喷码机编程指南
  11. MSN Message协议分析
  12. 360安全卫士安装不了此程序被组策略阻止
  13. python 二维转一维_Numpy 将二维图像矩阵转换为一维向量的方法
  14. Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献
  15. 路由器找不到拨号服务器,路由器设置宽带拨号无法上网 怎么办?
  16. C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址
  17. 电机仿真系列-基于LabVIEW的电机测试系统研究
  18. kickstart自动化系统安装_自动化运维之kickstart自动化部署安装操作系统
  19. pgadmin4界面设置中文的方法
  20. uvalive 4413(梅涅劳斯定理)

热门文章

  1. Guava中针对集合的 filter和过滤功能
  2. 测试缺陷分析务实篇-转
  3. 练习PYTHON之EPOLL
  4. EDM营销内容撰写要注意的几个方面
  5. 4种分支机构服务器管理最佳实践—Vecloud微云
  6. 在Apache上搭建pywebsocket提供html5的websocket服务
  7. 在HP安腾服务器上安装SuSE Linux Enterprise Server(SLES)11SP1手记
  8. 五百字简文告诉你美国为何要倾一国之力对中国的一家民营企业华为痛下杀手?...
  9. oracle查看被锁的表和解锁
  10. 28-Interview-面试