English 中文(简体)
Java 时间范围
原标题:timerange in java
  • 时间:2012-05-24 05:34:53
  •  标签:
  • java

In Java is there any way to store time ranges as key in Hashmap? I have one HashMap and I store times time range. For example:
I enter 0-50 range as key and for that key I will store some other objects as value. Now when I say 10 I should be able to get the corresponding value for that key.
Any value between 0-50 should get that object.

Map map = new HashMap();
map.put(0-50,"some object")
map.put(51-100,"some other object")

当我说 map.get(10) 时, 它应该能够找到“ 某些对象 ” 。 请建议如何做到这一点?

最佳回答

假设:非重叠范围。

您可以将区域起始点和结束点保存在一个树节中。起始点和结束点是分别存储起始时间和结束时间的对象,加上(引用)对象。您必须定义比较功能,以使对象在时间顺序上排列。

您可以使用 TreeSet 的楼层() 或天花板() 函数获取对象。

注意幅度不应重叠,即使在终点(如3-6和6-10)也不应重叠

这将给您设置区域插入和查询的日志复杂性 。

问题回答

我不会使用地图,相反,我会尝试使用R-Tree 。R-tree是为编制空间数据索引而创建的树结构。它储存矩形。它经常用来测试某个点(坐标)是否位于其他几何内。这些几何形以矩形为近似,而那些则储存在树上。

要保存矩形( 或关于它的信息), 您只需要保存左下角和右上角坐标即可。 如果是这样的话, 这是时间跨度的上下角。 您可以把它想象成, 似乎坐标的所有 Y 值都是 0 。 然后您可以用时间值查询树 。

当然,你会节省每个叶子的价值(时间跨度/矩形)

在谷歌上简单搜索r-tree java 后得出了一些可测量的结果。 执行自己的 R 树并非微不足道, 但如果您理解在插入/ 删除时重新排列树的原理, 则不会太复杂 。 在您的单维情况下, 它可能会变得更加简单 。

如果这是一个非重叠且相等的距离范围, 即除以50的距离, 您可以通过保持最大数量( 例如) 的散数来解决这个问题 。

50个物体,100个其他物体,等等。

如果输入为 10, 则得出直线乘数为 50, 并获得该密钥的值 。

您可立即到达50乘以50

  1. take mode on input say for the input 90 i.e. 90 % 50 = 40
  2. compute diff of step 1 result with 50. i.e. 50 - 40 = 10
  3. add step 2 result to input i.e. 90 + 10 = 100

您需要将区域映射为单一的键, 您为什么不使用像一个区域管理器对象, 该对象在最小值和最大键 1 之间返回任何值。 您可以使用环绕来将一个对 1 至 50 之间所有键的指向作为数值, 但这会浪费我的眼睛 。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签