设计RandomPool结构

2023-11-02

详情参看《程序员代码面试指南》P474。

package com.gxu.dawnlab_algorithm5;

import java.util.HashMap;

/**
 * 设计RandomPool结构
 * @author junbin
 *
 * 2019年7月1日
 */
public class RandomPool {
	public static class Pool<K> {
		private HashMap<K, Integer> keyIndexMap;
		private HashMap<Integer, K> indexKeyMap;
		private int size;

		public Pool() {
			this.keyIndexMap = new HashMap<K, Integer>();
			this.indexKeyMap = new HashMap<Integer, K>();
			this.size = 0;
		}

		public void insert(K key) {
			if (!this.keyIndexMap.containsKey(key)) {
				this.keyIndexMap.put(key, this.size);
				this.indexKeyMap.put(this.size++, key);
			}
		}

		public void delete(K key) { 
			if (this.keyIndexMap.containsKey(key)) {
				int deleteIndex = this.keyIndexMap.get(key);
				int lastIndex = --this.size;
				K lastKey = this.indexKeyMap.get(lastIndex);
				this.keyIndexMap.put(lastKey, deleteIndex);
				this.indexKeyMap.put(deleteIndex, lastKey);
				this.keyIndexMap.remove(key);
				this.indexKeyMap.remove(lastIndex);
			}
		}

		public K getRandom() {
			if (this.size == 0) {
				return null;
			}
			int randomIndex = (int) (Math.random() * this.size); // 0 ~ size -1
			return this.indexKeyMap.get(randomIndex);
		}

	}

	public static void main(String[] args) {
		Pool<String> pool = new Pool<String>();
		pool.insert("wang");
		pool.insert("jun");
		pool.insert("bin");
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
		System.out.println(pool.getRandom());
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计RandomPool结构 的相关文章

  • 面试华为,花了2个月才上岸,真的难呀····

    花2个月时间面试一家公司 你们觉得值吗 背景介绍 美本计算机专业 代码能力一般 之前有过两段实习以及一个学校项目经历 第一份实习是大二暑期在深圳的一家互联网公司做前端开发 第二份实习由于大三暑假回国的时间比较短 小于两个月 于是找的实习是在
  • C++/C笔试面试题目大大的集合

    C C笔试面试题目大大的集合 2010 10 22 00 08 3742人阅读 评论 0 收藏 举报 面试 c string 编译器 null 设计模式 1 const 有什么用途 请至少说明两种 答 1 可以定义 const 常量 2 c
  • 前端面试必备知识点总结(持续更新)

    这篇博客是对前端面试所必须掌握的知识点的总结 并且这篇博客正在持续更新中 面试复习 1 JavaScript 基础 1 执行上下文 作用域 闭包 1 什么是执行上下文 执行上下文是评估和执行JavaScript代码环境的抽象概念 每当Jav
  • [编程题]输出元素组成数组的排列组合形式

    题目 一个由有限个不同元素组成的数组的所有组合排列形式 要求排列的顺序以从小到大的顺序排列 按首列排序 首列相同 则按照第二列排序 前两列相同 则以第三列排序 以此顺序递推 输入例子1 1 2 输出例子1 1 2 2 1 例子说明1 输出结
  • 2024年java面试--mysql(3)

    系列文章目录 2024年java面试 一 spring篇 2024年java面试 二 spring篇 2024年java面试 三 spring篇 2024年java面试 四 spring篇 2024年java面试 集合篇 2024年java
  • 2021-07-19PHP面试笔试题记录

    1 执行以下代码 输出结果是 正确结果为 echo class b something 2 执行以下代码 输出结果是
  • 螺旋队列(由里向外)

    假设有如下排列 21 22 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 1的坐标是 0 0 3的坐标是 1 1 7的坐标是 1 1 分析 第1层之内有1个数 第2层之内有9个数 第3
  • 高频golang面试题:简单聊聊内存逃逸?

    文章目录 问题 怎么答 举例 问题 知道golang的内存逃逸吗 什么情况下会发生内存逃逸 怎么答 golang程序变量会携带有一组校验数据 用来证明它的整个生命周期是否在运行时完全可知 如果变量通过了这些校验 它就可以在栈上分配 否则就说
  • (初级)PHP经典面试题目汇总-沃森建站教程博客

    原文地址 http wosn net 355 html
  • Java基础面试题

    怎么理解栈 堆 堆中存什么 栈中存什么 栈是运行时的单位 而堆是存储的单位 栈解决程序的运行问题 即程序如何执行 或者说如何处理数据 堆解决的是数据存储的问题 即数据怎么放 放在哪儿 堆中存的是对象 栈中存的是基本数据类型和堆中对象的引用
  • 实施运维企业面试题-5

    NETWORK 1 请描述 TCP IP 协议中主机与主机之间通信的三要素 参考答案 IP 地址 IP address 子网掩码 subnet mask IP 路由 IP router 2 请描述 IP 地址的分类及每一类的范围 参考答案
  • Java面试----2018最全Redis面试题整理

    1 什么是Redis 答 Redis全称为 Remote Dictionary Server 远程数据服务 是一个基于内存的高性能key value数据库 2 Redis的数据类型 答 Redis支持五种数据类型 string 字符串 ha
  • 【软件测试】备战秋招,数家公司的面经合集整理,总有一家你愿意去的,还不来赶紧学点经验。

    面经 前言 华为测试工程师 笔经 技术一面 技术二面 主管面 结果 大华测试 一面 二面 过了一两个小时就接到了 三面 下午3点接到hr电话 结果 中科创达 笔试 一面 技术面 二面 hr面 结果 恒生测试 安硕测试 恒生 安硕测试 深信服
  • 2024年java面试--mysql(4)

    系列文章目录 2024年java面试 一 spring篇 2024年java面试 二 spring篇 2024年java面试 三 spring篇 2024年java面试 四 spring篇 2024年java面试 集合篇 2024年java
  • XY提供面试题

    1 软件测试的流程是什么 1 需求调查 全面了解系统概况 应用领域 软件开发周期 软件开发环境 开发组织 时间安排 功能需求 性能需求 质量需求及测试要求等 根据系统概况进行项目所需的人员 时间和工作量估计以及项目报价 2 制定初步的项目计
  • Java坑人面试题系列: 变量声明(中级难度)

    作用域规则与变量覆盖面试题 Java Magazine上面有一个专门坑人的面试题系列 https blogs oracle com javamagazine quiz 2 这些问题的设计宗旨 主要是测试面试者对Java语言的了解程度 而不是
  • Go面试必会基础题

    文章目录 1 请指出下面代码的错误 2 下面代码输出什么 3 下面代码输出什么 4 下面的代码有什么问题 5 下面代码输出什么 6 下面代码有几处错误的地方 请说明原因 1 请指出下面代码的错误 package main var gvar
  • 函数的防抖和节流简述

    防抖和节流 即 限制函数的执行次数 防抖和节流二者非常相似 但还是有细微的不同 防抖 通过 setTimeout 的方式在一定的时间间隔内 将多次触发变成一次触发 比如用户在十秒内一直连续点击 但最后只会触发一次 简单举例 function
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 面试题:偏向锁的十连问,你能接住几个?

    文章目录 前言 名词解释 问题解析 问题1 如何判断当前锁对象为偏向锁 问题2 偏向锁如何判断锁重入 问题3 符合什么条件才会尝试获取偏向锁 问题4 线程进入偏向锁后 会不会创建lock record 问题5 偏向锁膨胀后

随机推荐

  • chatgpt赋能python:Python长度转换程序:方便快捷的单位转换工具

    Python长度转换程序 方便快捷的单位转换工具 如果你曾经需要将英寸转换为厘米 或是想知道你的身高在米制和英制中是多少 那么你一定知道这是一个烦人的任务 为了解决这个问题 我们创建了基于Python的长度转换程序 能够帮助你轻松转换任何单
  • wsl2安装及相关编程环境配置

    wsl2的安装及相关环境配置 1 设置 gt 更新和安全 gt 开发者选项 gt 开发人员模式 2 设置 gt 应用 gt 应用和功能 gt 程序和功能 gt 程序和功能 gt 启用或关闭windows功能 gt 适用于linux的wind
  • 编程训练————岛屿数量(C++)

    岛屿数量 题目描述 主要思想 深度优先搜索 广度优先搜索 代码实现 深度优先搜索 广度优先搜索 题目描述 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向或竖直方向上
  • 如何升级numpy的版本

    嗯 如何升级numpy的版本 这是个很火的问题 解决方案如下 在命令下输入pip install U numpy 就可以升级numpy包了 pip install upgrade numpy 这样也可以
  • 统计二叉树中度为1的节点,层序遍历实现

    include
  • 分布式高可靠:负载均衡

    分布式高可靠 负载均衡 前言 什么是负载均衡 服务请求的负载均衡方法 轮询策略 顺序轮询 加权轮询 随机策略 哈希和一致性哈希策略 对比分析 知识扩展 如果要考虑请求所需资源不同的话 应该如何设计负载均衡策略呢 总结 前言 分布式可靠性相关
  • chrome浏览器安装右键翻译插件

    平常打开网页查看相关文章的时候 遇到一些不会的英文单词 可能第一反应是复制英文单词到百度翻译里面 下面为介绍一种直接右键选中英文单词 实现在线翻译的插件 这边用到的是 划词翻译 插件 安装步骤如下 第一步 下载扩展程序插件 链接 https
  • 深入JVM - 实例详解invoke相关操作码

    Java虚拟机规范中有一个章节专门列出了操作码助记符 对应的链接为 Java Virtual Machine Specification Chapter 7 Opcode Mnemonics by Opcode 其中 方法调用相关的操作码为
  • 毕业设计 基于Arduino的肺活量计

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • 编程语言Java与c#的区别浅谈

    Java和c 都是编程的语言 它们是两个不同方向的两种语言 它们到底有什么区别呢 现在我给大家介绍一下 首先 我给大家说说他们的相同点吧 它们都是面向对象的语言 也就是说 它们都能够实现面向对象的思想 封装 继承 多态 下面给大家介绍一下它
  • NGINX源码之:listen和server_name命令与listening监听创建

    在http块的server块解析中 通过解析listen和server name命令配置 完成端口监听的初始化 虚拟主机配置关联 实现从host port到虚拟主机的映射关系 在进入解析源码之前 先来看看server块集中配置 server
  • html如何给3种渐变色,css中颜色渐变的实现(三种方式)

    本篇文章给大家带来的内容是关于css中颜色渐变的实现 三种方式 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 注意IE9及之前的版本不支持渐变 Safari要加 webkit 的前缀 Opera要加 o 的前缀 Firefo
  • explicit关键字的作用及其用法

    一 explicit作用 在C 中 explicit关键字用来修饰类的构造函数 被修饰的构造函数的类 不能发生相应的隐式类型转换 只能以显示的方式进行类型转换 这个关键字只能用在类内部的构造函数声明上 而不能用在类外部的函数定义上 它的作用
  • vue后台返回二维码展示在前端页面,复制二维码到剪贴板

    1 二维码渲染 vue请求 后端返回二维码 在请求时加上 responseType blob export function getQrCode query return request url xx method get params q
  • 单点登录CAS学习(二):使用IDEA搭建cas-overlay-5.3工程

    上一篇对于单点登陆进行了初步了解 我们做单点登录应用的时候 会有两个场景 单点登录的服务端 单点登录的客户端 指各个应用系统 从本篇开始的系列文章将分别介绍服务端的工程如何搭建 客户端如何改造以适用于单点登录 首先从服务端开始 我们往往需要
  • ElasticSearch集群管理(VMware)

    一 集群结构 ES通常以集群方式工作 这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力 同时也增加了系统的 容错能力及高可用 下图是ES集群结构的示意图 此处的设置为 每个主分片有两个副本 如果某个节点挂了也不怕 比如节点1挂了
  • 操作系统学习(十一)处理机调度

    一 知识总览 调度 按某种规则来决定处理这些任务的顺序 多道程序系统中 进程的数目往往多于处理机的数目 按照一定的算法从进程就绪队列中选择一个进程将处理机分配给他 以实现进程的并发执行 二 高级调度 作业调度 作业 用户在一次解题或一个事务
  • 计算机单位换算

    一 计算机容量单位 容量单位 字节 B gt 千字节 KB gt 兆字节 MB gt 吉字节 GB gt TB gt PB gt EB ZB YB NB DB等 注 Byte就是B也就是字节 KB是千字节 MB是兆 GB是千兆 TB是千千兆
  • jvisualvm监控tomcat

    1 修改Tomcat的catalina sh文件 修改tomcat的bin目录下的 catalina sh文件 搜索 JAVA OPTS 在引号中添加参数 Dcom sun management jmxremote port 10086 D
  • 设计RandomPool结构

    详情参看 程序员代码面试指南 P474 package com gxu dawnlab algorithm5 import java util HashMap 设计RandomPool结构 author junbin 2019年7月1日 p