有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中创建按创建/更新时间排序的有序HashMap

我正在以以下格式处理数据元组:[IP,服务字节数,时间]。我在IP上创建了一个HashMap来计算每个IP的字节数。然后,我意识到我需要删除一些最近使用最少的键值对来创建更多的空间。我想创建一个时间约束,比如说1小时,然后在这段时间内不采取任何行动就删除键值对。所以我需要为每一对节省更新时间。事实上,为了获得良好的性能,按时间戳排序对似乎是合理的

因此,我想做的是根据键值对的创建或更新时间维护一个排序列表。我需要明确地知道这些创建和更新时间。我想出了两个不同的想法,但现在我完全确定该使用哪一个,以及如何使用。以下是我的两个想法:

  • 我需要一个LinkedList,其头部指向最近更新的键值对的时间戳,并使该键值对指向列表节点
  • 我需要根据HashMap的创建/更新时间按顺序维护它们。也许我需要用整数值和一个长的指示时间戳将值从整数改为对象

问题是如何在Java中实现这些功能,以实现高效的添加/删除/获取性能?或者我可以使用哪些库来获得按创建/更新时间排序的哈希图


共 (1) 个答案

  1. # 1 楼答案

    要按创建/更新时间排序,需要有时间进行比较。这意味着您的对象必须知道它是何时创建/更新的。通过在创建对象时默认设置version字段,并在更新对象时设置new Date()字段,可以相对容易地实现这一点

    有一些结构可以基于(TreeSetTreeMap)实现由对象本身(Comparable接口)或Comparator定义的顺序。如果存储了保存创建日期或更新日期的项目,则可以实现一个比较器,以帮助排序过程

    如果限制为LinkedListHashMap,则必须使用Collections#Sort对列表进行排序。在HashMap的情况下,必须对其条目集进行排序,但由于无法修改它,因此必须以这种方式生成一个新的排序映射

    尽管如此,HashMap是一种与排序无关的结构,因此在遍历它时仍然会遇到一些问题。一个LinkedHashMap可以解决这个问题,但同样,这完全取决于您的数据类型限制