当前位置: 首页 > news >正文

【简单】设计有setAll功能的哈希表-Java

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter

package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other; import java.util.HashMap; /** * 设计有setAll功能的哈希表 * * 【题目】 * 哈希表常见的三个操作是put、get和containsKey,而且这三个操作的时间复杂度为O(1)。现在想加一个setAll功能,就是把所 * 有记录的value都设成统一的值。请设计并实现这种有setAll功能的哈希表,并且put、get、containsKey和setAll四个操作的 * 时间复杂度都为O(1)。 * * 【难度】 * 简单 * * 【解答】 * 加入一个时间戳结构,一切问题就变得非常简单了。具体步骤如下: * 1.把每一个记录都加上一个时间,标记每条记录是何时建立的。 * 2.设置一个setAll记录也加上一个时间,标记setAll记录建立的时间。 * 3.查询记录时,如果某条记录的时间早于setAll记录的时间,说明setAll是最新数据,返回setAll记录的值。如果某条记录的时间 * 晚于setAll记录的时间,说明记录的值是最新数组,返回该条记录的值。 * 具体请参看如下的SetAllHashMap类。 * * @author Created by LiveEveryDay */ public class SetAllHashMap<K, V> { public static class MyValue<V> { private final V value; private final long time; public MyValue(V value, long time) { this.value = value; this.time = time; } public V getValue() { return this.value; } public long getTime() { return this.time; } } private final HashMap<K, MyValue<V>> baseMap; private long time; private MyValue<V> setAll; public SetAllHashMap() { this.baseMap = new HashMap<>(); this.time = 0; this.setAll = new MyValue<>(null, -1); } public boolean containsKey(K key) { return this.baseMap.containsKey(key); } public void put(K key, V value) { this.baseMap.put(key, new MyValue<>(value, this.time++)); } public void setAll(V value) { this.setAll = new MyValue<>(value, this.time++); } public V get(K key) { if (this.containsKey(key)) { if (this.baseMap.get(key).getTime() > this.setAll.getTime()) { return this.baseMap.get(key).getValue(); } else { return this.setAll.getValue(); } } else { return null; } } public static void main(String[] args) { SetAllHashMap<String, Integer> map = new SetAllHashMap<>(); map.put("key", 1); map.setAll(0); System.out.printf("The result is: %d", map.get("key")); } } // ------ Output ------ /* The result is: 0 */
http://www.jsqmd.com/news/696995/

相关文章:

  • 终极指南:如何快速重置JetBrains IDE试用期,实现30天无限续杯
  • 从David Marr的视觉计算理论,聊聊为什么你的CV模型总感觉“差点意思”
  • 5个步骤掌握SillyTavern:打造专业级AI角色扮演平台终极指南
  • 探索 Geolib:简单高效的地理空间计算库完全指南
  • JetBrains IDE试用期重置终极指南:三步轻松恢复30天免费使用
  • Android位置隐私保护技术深度剖析:FakeLocation模块的架构设计与实战应用
  • 【感知机】从零推导到实战:手撕Perceptron学习算法核心
  • 【简单】调整[0,x)区间上的数出现的概率-Java
  • 含光伏接入的14节点配网储能选址定容模型优化——基于改进粒子群算法的程序实现
  • 低代码开发效率提升300%的关键配置,VSCode这7个隐藏参数99%团队从未启用,速查!
  • SAP批次管理配置保姆级教程:从激活到查找策略,手把手带你避开新手常见坑
  • 如何快速开发微信公众号?FastBootWeixin框架让开发效率提升300%
  • GPU硬件视频编码器技术与UHD直播优化实践
  • 告别生硬动画!用 GSAP 库 5 分钟打造丝滑扭蛋抽奖效果(含缓动函数详解)
  • 2026年3月中央空调实力厂家推荐,酒店中央空调/热泵中央空调/办公室中央空调/工厂中央空调,中央空调实力厂家推荐 - 品牌推荐师
  • 从‘马拉车’到‘回文中心’:图解Manacher算法,让晦涩概念一目了然
  • uni-app vue2 通过vue/cli 脚手架安装sass
  • LangChain核心组件解析:构建高效RAG系统的10大关键技术
  • 如何快速集成SpiderWebScoreView:Android蛛网评分控件的完整指南
  • 告别千篇一律:SillyTavern如何让你的AI对话充满个性与情感
  • 解锁《动物森友会》无限可能:NHSE存档编辑器的5大核心功能详解
  • NCM文件格式转换技术方案:从格式壁垒到跨平台音频自由
  • Teamcenter AWC 使用 流程【指派列表】功能,快速指派审批人员 - 张永全
  • 云原生边缘计算:技术架构与实践
  • 终极揭秘Gramado OS:探索下一代轻量级操作系统的无限可能
  • Agent 怎么评估和测试?看它能不能稳定把事做成
  • 神经形态硬件与事件驱动视觉在低功耗瞳孔追踪中的应用
  • Rust驱动的番茄小说下载器:高性能网络内容获取技术深度解析
  • 统信UOS Server + openGauss:国产化环境数据库部署的10个关键配置项详解
  • Vue-good-table复选框表格:完整实现行选择和批量操作