如何在到期后从集合中删除

时间:2012-02-04 17:21:19

标签: java

我有一套代币:

   private Set<Token> tokenSeen;

其中

Token is [id, expirationtime]

每个令牌都有不同的客户端设置的到期时间。

因此,当到期时间发生时,我想从tokenSeen set中删除令牌。

3 个答案:

答案 0 :(得分:0)

您可能希望使用按到期时间排序的有序集。然后定期检查第一个元素,何时过期将其删除。之后再次检查新的第一个元素,如果已过期则删除它。重复直到(当前)第一个元素没有到期(并且由于到期时间的排序,所有其他元素也不应该过期)。

要定期检查,您可能需要使用Quartz或计时器等调度程序,具体取决于您的整体架构。

答案 1 :(得分:0)

使用迭代器迭代集合中的所有元素,并删除任何具有旧过期时间的元素。如果没有对您删除的令牌的引用,那么Java Garbage Collector将在执行时从内存中清除它们。

  Date now = new Date();
  Set<Token> tokenSeen = new HashSet<Token>();
  Iterator<Token> iterator = tokenSeen.iterator();
  while (iterator.hasNext()) {
     Token token = iterator.next();
     if(token.expirationtime.before(now))
        iterator.remove();
  }

答案 2 :(得分:0)

您可以设置DelayQueue来跟踪哪些元素已过期并将其删除。