【问题标题】:HashMap remove after a fix timeHashMap 在固定时间后删除
【发布时间】:2014-05-25 03:50:30
【问题描述】:

我想在放置 1/2 小时后从 hashmap 中删除该值。 请建议。

例如:- 如果我在上午 10:30 将一些数据放入 HashMap,那么我想在上午 11:00 将其删除。

【问题讨论】:

  • 任何代码尝试?
  • 我正在使用计时器类来设置密钥,并在调用运行方法时删除此密钥,但由于负载高,我遇到了错误。线程“pool-1-thread-9”中的异常 java.lang.OutOfMemoryError: 无法在 java.lang.Thread.start(Thread.java:597) 的 java.lang.Thread.start0(Native Method) 创建新的本机线程) 在 java.util.Timer.(Timer.java:137) 在 java.util.Timer.(Timer.java:106)
  • 建议您在答案中添加评论
  • @Patel,请详细说明..
  • Tejas 说“答案”时的意思是“问题”。

标签: java hashmap concurrenthashmap


【解决方案1】:

您可以在 java 中使用 Timer 类。有关演示,请参阅此站点。http://www.tutorialspoint.com/java/util/timer_schedule_period.htm

或者,创建一个 hashMap 并添加一个对象作为键和你添加的时间作为值。

然后有一个名为 delete 的方法,它需要以毫秒为单位的时间。有一个倒计时功能,如果计时器归零,它应该返回真。

在 delete 方法的 if 条件中,检查 IF 条件是否为真,如果为真,则设置一个变量 initialTime,即 currentTime - 用户传递给 delete 方法的毫秒数。

然后迭代与initialTime匹配的hashmap并删除它。

这是粗略的算法

public void delete(Time inMilliSeconds){
     if(countDownTimer()){
         initialTime = CurrentTimeInstance - inMilliSeconds;
         //Iterate HashMap and delete all values which is equal to initialTime;
     }
}

public boolean countDownTimer(inMilliSeconds){
     //Timer that reduces to 00:00:00. After running down to zero return true.

}

【讨论】:

  • @Siva 我正在做同样的事情,但是在将 aprox 1000 的值放在它上面抛出异常之后,谢谢。
  • @Siva 我不想每次都迭代 HashMap 它会占用很高的 CPU,实际上问题是每个键我正在创建一个 Timer 类的新对象,它占用了巨大的内存块,所以它会抛出内存不足错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2013-12-17
  • 2021-09-12
  • 2023-02-10
  • 2021-10-22
  • 2018-05-31
相关资源
最近更新 更多