java - 对于这种特殊情况,我应该使用什么数据结构?

标签 java algorithm

<分区>

这不是家庭作业

我正在设计一个 parking 场,假设我有一个变量 used 用于计算使用了多少 parking 位,还有一个 Hashmap 用于将汽车 VIN 号码映射到 parking 场号码.

我从 used = 0 开始

当 CarA 到达时:

used = used + 1;
h.put("CarA" , used) //CarA-> 1

当 CarB 到达时:

used = used + 1;
h.put("CarB" , used) //CarB-> 2

当 CarC 到达时:

used = used + 1;
h.put("CarC" , used) //CarC-> 3

此时used包含3

现在我删除 CarA。

used = used - 1 // used contains 2

问题: 但现在我需要跟踪插槽 1 是空的这一事实,我不应该忘记将它再次用于任何其他汽车。我如何跟踪事实?

我的解决方案(我想对此进行改进并获得批评)是我可以将这些批号(在移除汽车时释放)保留在队列中,并且当汽车到来时队列不为空我应该简单地使用队列中的槽,直到队列为空。

最佳答案

你的解决方案很好,除了它不需要是一个队列:任何具有 O(1) 插入和 O(1) 删除的数据结构都可以。例如,使用堆栈代替队列可以获得相同的性能。

这个想法类似于为内存缓冲区使用后备列表:而不是分配新资源(在您的情况下是一个新的 parking 位)首先检查释放资源的集合以查看是否有可用的项目重复使用。这种方法的另一个好处是您随时可以使用“高水位线”,告诉您在高峰期有多少辆汽车。

关于java - 对于这种特殊情况,我应该使用什么数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309580/

相关文章:

algorithm - 您可以截断多少 SHA1 散列并合理确定拥有唯一 ID?

java - Tomcat服务器404

java - 如何在 Android 应用程序中使用 TensorflowInferenceInterface

java - 如何将 Keycloak 7 与 Spring Boot 2 集成

java - 在java代码中实现两个监听器时出错

performance - 比赛调度算法起点

java - 使用textureRegion绘图

c++ - 使用 Peterson 的 N 进程算法的信号量实现

string - 任何使用数字作为生成随机字符串的提要的算法?

algorithm - 关于 Codility 的 HilbertMaze 任务