029_自己实现一个HashMap
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相关推荐
- hashmap赋值给另一个hashmap_图解设计一个 HashMap
目前我们学到的数据结构有:单链表,双向链表,栈,队列,循环队列,双端队列.今天学习 LeetCode 的 「 706. Design HashMap 」,从设计一个 HashMap 到掌握其内部原理. ...
- java map存放班级和姓名_Java 创建一个HashMap对象,并在其中添加学生的姓名和成绩,键为学生姓名,值为学生成绩,使用增强for循环遍历该HashMap,并输出学生成绩。...
|--需求说明 |--实现思路 1.使用map.containsKey()判断输入的姓名在不在map里面,如果在就打印 2.遍历全班姓名和成绩,需要创建Map.entry,然后在map.entry里面 ...
- 一个HashMap跟面试官扯了半个小时
一个HashMap能跟面试官扯上半个小时 <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 一个volatile ...
- 手写实现一个HashMap
手写实现一个HashMap 前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想 ...
- 靠一个HashMap的讲解打动了头条面试官,我的秘诀是
最近收集了一份github标星81.6k的Java面试突击手册,文末查看 关注 转发+转发+转发 私信回复关键词 [学习]即可获取~ 预备知识 位运算知识 位运算操作是由处理器支持的底层操作,底层硬件 ...
- 一个HashMap对象所占内存的分析
Map<Object, Object> map = new HashMap<>(); 日常写代码中,可能都不会关注这一行代码占了多少个内存,今天我们就来分析一下. 首先,map ...
- Java 创建一个HashMap对象,并在其中添加学生的姓名和成绩,键为学生姓名,值为学生成绩,使用增强for循环遍历该HashMap,并输出学生成绩。...
|--需求说明 如题 |--实现思路 1.使用map.containsKey()判断输入的姓名在不在map里面,如果在就打印 2.遍历全班姓名和成绩,需要创建Map.entry,然后在map.entr ...
- 一个HashMap能跟面试官扯上半个小时
一个HashMap能跟面试官扯上半个小时 <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 一个volatile ...
- float占几个字节_一个HashMap对象占多少字节?
对象=对象头+成员变量+对齐填充 对象头结构:java对象在Heap里面的结构是这样的:对象头跟对象体,对象体跟C里面的结构体是一样的,对象头由两个域组成:用于存放hashcode.同步.GC的_ma ...
最新文章
- 关于StoneAge项目的敏捷
- 报告!我还有几个阿里同事也去了亚运会
- 单链表的C++实现(采用模板类)
- Even for transaction data request, metadata is still needed as prerequisite
- 05.序列模型 W1.循环序列模型
- dateutil 日期计算_日期时间 - 日期时间工具-DateUtil - 《Hutool 参考文档》 - 书栈网 · BookStack...
- SWFUpload多文件上传,文件大小增大问题
- python语言写九九乘法表_怎么使用Python语言写一个九九乘法表?
- 修改表和约束(alter语句)
- 依码仕喷码机编程指南
- MSN Message协议分析
- 360安全卫士安装不了此程序被组策略阻止
- python 二维转一维_Numpy 将二维图像矩阵转换为一维向量的方法
- Windows XP SP3 笔记本专用版 电脑疯子 2010年巨献
- 路由器找不到拨号服务器,路由器设置宽带拨号无法上网 怎么办?
- C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址
- 电机仿真系列-基于LabVIEW的电机测试系统研究
- kickstart自动化系统安装_自动化运维之kickstart自动化部署安装操作系统
- pgadmin4界面设置中文的方法
- uvalive 4413(梅涅劳斯定理)