java:用引用序列化大型列表

java:用引用序列化大型列表,java,serialization,graph,Java,Serialization,Graph,我有一个包含100000个元素的列表。 每个元素都包含一个Hashmap,其中存储了许多元素 计算对象之间的依赖关系需要很长时间,因此我想序列化结果以快速读取。元素是图的节点,hashmap中的元素是它们的邻居和边权重- 在反序列化之后保持对象之间的引用很重要,这意味着hashmap中的元素必须与我的100.000元素列表中的元素完全相同。 我尝试过java序列化,但由于列表中有太多循环引用,因此出现了StackOverflower错误。 我尝试在额外的步骤中序列化每个元素: out.write

我有一个包含100000个元素的列表。 每个元素都包含一个Hashmap,其中存储了许多元素

计算对象之间的依赖关系需要很长时间,因此我想序列化结果以快速读取。元素是图的节点,hashmap中的元素是它们的邻居和边权重-

在反序列化之后保持对象之间的引用很重要,这意味着hashmap中的元素必须与我的100.000元素列表中的元素完全相同。 我尝试过java序列化,但由于列表中有太多循环引用,因此出现了StackOverflower错误。 我尝试在额外的步骤中序列化每个元素:

out.writeObject(o);
为列表中的每个元素调用。 但是在反序列化之后,元素中的哈希映射为null

我曾尝试使用hibernate将其存储到数据库中,但如果使用

@org.hibernate.annotations.Type(
        type = "org.hibernate.type.SerializableToBlobType"
 )
我的地图中的元素看起来相同,但都是新对象

我已经创建了一个新类,其中包含来自我的映射的键和对象,并将其存储在一个额外的数据库表中,但hibernate tooks会永远获取它们

用原始对象替换反序列化后的对象也需要花费很长时间

是否有人有想法将此列表存储起来,以便随时快速使用? 我愿意尝试另一种数据格式来存储图形。有什么想法吗?
谢谢大家!

可能对您有用。“我尝试过java序列化,但由于列表太长,我得到了一个StackOverflower错误。”大型列表不会导致
StackOverflower错误
,尽管它可能会导致
OutOfMemoryError
。只有当你有循环引用时,堆栈才会溢出。“也许这个问题的答案对你有用。”我搜索了整个互联网:)“一个大列表不会导致StackOverflowerError,尽管它可能会导致OutOfMemoryError”你是对的。我会改正的