Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 存储可按id寻址并按时间戳排序的对象_Java_Data Structures - Fatal编程技术网

Java 存储可按id寻址并按时间戳排序的对象

Java 存储可按id寻址并按时间戳排序的对象,java,data-structures,Java,Data Structures,我正在构建一个应用程序,我需要帮助找到一个数据结构来做我想做的事情 背景 每秒大约有100个事件。这些事件有3个部分,一个字符串会话uuid,一个长时间戳Unix时间,可能还有一个json字符串。会话uuid用于将来自同一会话的事件绑定在一起。我们收到的第一个给定事件设置会话的TTL 要求 我试图存储这些会话,它们本质上是按事件时间排序的事件集合。我同时遇到的两个问题是: 我需要能够根据会话的UUID快速查找会话。 我需要能够根据会话的属性TTL标记来确定哪些会话已过期。 我想的是一个映射,我可

我正在构建一个应用程序,我需要帮助找到一个数据结构来做我想做的事情

背景

每秒大约有100个事件。这些事件有3个部分,一个字符串会话uuid,一个长时间戳Unix时间,可能还有一个json字符串。会话uuid用于将来自同一会话的事件绑定在一起。我们收到的第一个给定事件设置会话的TTL

要求

我试图存储这些会话,它们本质上是按事件时间排序的事件集合。我同时遇到的两个问题是:

我需要能够根据会话的UUID快速查找会话。 我需要能够根据会话的属性TTL标记来确定哪些会话已过期。
我想的是一个映射,我可以在其中键入UUID,但值是按排序顺序保存的。我可以让EventSession对象按时间进行比较,但SortedMap似乎只对键进行排序。我不确定我的要求是否存在根本问题,但我对想法持开放态度。

听起来您需要两种结构:一种是按UUID查找会话对象的映射,另一种是按TTL排序存储相同会话对象的优先级队列。

听起来您需要两种结构:一种是按UUID查找会话对象的映射,另一种是按UUID排序存储相同会话对象的优先级队列TTL.

我也做了同样的事情。您需要2个数据结构:

一个包含时间会话ID对的列表,保留指向开始和结束的指针,以便您可以在固定时间内插入和删除

由已排序sessionID的红黑树实现的映射sessionID->JSonString


红黑树是自动平衡的,更容易实现AVL,并将为您提供logn插入、查找和删除。因此,当从列表中删除时,您将获取存储在那里的ID以及logn time中映射中的条目。

我也做了同样的事情。您需要2个数据结构:

一个包含时间会话ID对的列表,保留指向开始和结束的指针,以便您可以在固定时间内插入和删除

由已排序sessionID的红黑树实现的映射sessionID->JSonString


红黑树是自动平衡的,更容易实现AVL,并将为您提供logn插入、查找和删除。因此,当从列表中删除时,您会使用存储在那里的ID以及logn time中地图中的条目。

谢谢您提出了一个我没有考虑过的好建议。谢谢您提出了一个我没有考虑过的好建议。我应该更清楚一些。我希望使用Java集合。我可以看出,基于我的标签,我可能会误导别人,说我在建造自己的房子。不过,谢谢你的建议。我应该说得更清楚些。我希望使用Java集合。我可以看出,基于我的标签,我可能会误导别人,说我在建造自己的房子。不过,谢谢你的建议。