在Java中创建按创建/更新时间排序的有序HashMap
我正在以以下格式处理数据元组:[IP,服务字节数,时间]。我在IP上创建了一个HashMap来计算每个IP的字节数。然后,我意识到我需要删除一些最近使用最少的键值对来创建更多的空间。我想创建一个时间约束,比如说1小时,然后在这段时间内不采取任何行动就删除键值对。所以我需要为每一对节省更新时间。事实上,为了获得良好的性能,按时间戳排序对似乎是合理的
因此,我想做的是根据键值对的创建或更新时间维护一个排序列表。我需要明确地知道这些创建和更新时间。我想出了两个不同的想法,但现在我完全确定该使用哪一个,以及如何使用。以下是我的两个想法:
- 我需要一个LinkedList,其头部指向最近更新的键值对的时间戳,并使该键值对指向列表节点李>
- 我需要根据HashMap的创建/更新时间按顺序维护它们。也许我需要用整数值和一个长的指示时间戳将值从整数改为对象李>
问题是如何在Java中实现这些功能,以实现高效的添加/删除/获取性能?或者我可以使用哪些库来获得按创建/更新时间排序的哈希图
# 1 楼答案
要按创建/更新时间排序,需要有时间进行比较。这意味着您的对象必须知道它是何时创建/更新的。通过在创建对象时默认设置
version
字段,并在更新对象时设置new Date()
字段,可以相对容易地实现这一点有一些结构可以基于(
TreeSet
和TreeMap
)实现由对象本身(Comparable
接口)或Comparator
定义的顺序。如果存储了保存创建日期或更新日期的项目,则可以实现一个比较器,以帮助排序过程如果限制为
LinkedList
和HashMap
,则必须使用Collections#Sort
对列表进行排序。在HashMap
的情况下,必须对其条目集进行排序,但由于无法修改它,因此必须以这种方式生成一个新的排序映射尽管如此,
HashMap
是一种与排序无关的结构,因此在遍历它时仍然会遇到一些问题。一个LinkedHashMap
可以解决这个问题,但同样,这完全取决于您的数据类型限制