Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:自动更新hashmap_Java_Date_Timer_Hashmap - Fatal编程技术网

java:自动更新hashmap

java:自动更新hashmap,java,date,timer,hashmap,Java,Date,Timer,Hashmap,所以现在我有一个hashmap来存储日历对象(只需要一种存储日期的方法)。每个值存储两个日历对象,一个表示事件的开始,另一个表示事件的结束。用户通过gui输入这些数据,它们可以跨越数周和数月 我需要做的是能够在这些条目过期时删除它们,这意味着它们的第二个日历对象已根据实际日期过期。我希望在实例运行时自动执行此操作 我的想法是让一个计时器线程运行,每周一次,它可以遍历hashmap中的所有条目,并删除过期的条目。我知道它并不那么实用,它是为了一个学校项目。但我只是在寻找一些想法或设计模式来帮助高效

所以现在我有一个hashmap来存储日历对象(只需要一种存储日期的方法)。每个值存储两个日历对象,一个表示事件的开始,另一个表示事件的结束。用户通过gui输入这些数据,它们可以跨越数周和数月

我需要做的是能够在这些条目过期时删除它们,这意味着它们的第二个日历对象已根据实际日期过期。我希望在实例运行时自动执行此操作

我的想法是让一个计时器线程运行,每周一次,它可以遍历hashmap中的所有条目,并删除过期的条目。我知道它并不那么实用,它是为了一个学校项目。但我只是在寻找一些想法或设计模式来帮助高效地实现这一点


谢谢,如果您需要更多信息,请告诉我。

拥有执行维护任务的后台线程是一个好主意,也是一种非常常见的做法。请注意,Hashmap不是线程安全的,因此您需要同步其访问,或替换为线程安全类,如ConcurrentHashMap。

您可以创建树集

TreeSet<DateObject> yourTreeSet = new TreeSet<DateObject>(new DateComparator());
TreeSet yourTreeSet=newtreeset(newdatecomparator());

然后实现您的比较器,当您使用日历将对象添加到树集中时,对象将被排序,这只会导致悲伤-这是一个可怕的类,充满陷阱和bug


相反,根据将开始和结束存储为
long
值,并与这些值进行比较,以保持整洁和简单。

另一个选项是为每个条目实例化一个。实现它的
run()
方法,在时间从映射中删除条目——在您的情况下,这可能是结束时间。这样,您就不需要每周清理,条目一到期就会被删除

当然,要注意线程安全,也许可以使用一些,我的意思是
Map
实现

[编辑]

或者更好的是,改用。

也许这对以下方面有用: 番石榴有一个“缓存”机制,可以处理超时

因此,处理是为您准备的,但请注意:后台没有线程运行。维护工作在接线期间完成。信息也包含在链接中

番石榴溶液“解释”了另一种方式。 为什么不处理超时元素的列表/映射,这些元素会在访问过程中告诉您超时,或者自行关闭。 您不必从外部管理元素,它们可以自己处理超时。
这种方式对用户来说通常非常简单和透明。

如果不为每个条目指定线程(从倒计时到过期),这可能是您的最佳选择。您可以查看一下,而不必重新发明轮子!已经为您完成了,让您配置算法来更新缓存(map)。啊,我明白了,谢谢。我担心的主要事情是这个计时器线程实践是否有任何好处,谢谢你澄清。是的,我想,我真的不需要日历对象用于任何其他目的,thnks。虽然我也反对存储日历,但我认为最好将它们存储为日期。只要不涉及Date中那些不推荐使用的方法,Date就可以被视为一个不可变的值对象,可以安全地使用,并且它提供了语义meaning@AdrianShum你认为
Date
是安全的,这是完全错误的:这个方法并没有被弃用,但却破坏了不变性!如果我需要设置一个未来的日期,那么使用set方法是否仍然可以,然后立即使用getTime并将其作为长时间存储呢?@Bohemian Agree:)我真的忽略了这一点。不过,我还是喜欢存储为
Date
,因为
long
仍然没有给出语义含义。谢谢,这看起来真的很好。希望一切顺利。