Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 存储二进制路径的最有效方式(例如,通过二叉树)_Java_Performance_Types_Tree_Binary - Fatal编程技术网

Java 存储二进制路径的最有效方式(例如,通过二叉树)

Java 存储二进制路径的最有效方式(例如,通过二叉树),java,performance,types,tree,binary,Java,Performance,Types,Tree,Binary,我试图尽可能高效地存储二进制路径(就使用尽可能少的内存而言)。 例如,指向链接二叉树中特定节点的路径(从根开始)——存储该路径的简单方法是存储节点(或其值)本身 但这既不高效,也不优雅。如果我想在不同的二进制树上应用相同的路径,这是行不通的 因此,您可以只保存一个序列,例如一个字符串,如“lrlrrr”,其中l表示左分支,r表示右分支。但是将这些信息存储在字符串中仍然不是很有效 这可以通过使用布尔数组来改进。但我不知道Java在后台是如何处理这些问题的。另外,我希望避免固定大小的字符串/数组 我

我试图尽可能高效地存储二进制路径(就使用尽可能少的内存而言)。 例如,指向链接二叉树中特定节点的路径(从根开始)——存储该路径的简单方法是存储节点(或其值)本身

但这既不高效,也不优雅。如果我想在不同的二进制树上应用相同的路径,这是行不通的

因此,您可以只保存一个序列,例如一个字符串,如
“lrlrrr”
,其中
l
表示左分支,
r
表示右分支。但是将这些信息存储在字符串中仍然不是很有效

这可以通过使用布尔数组来改进。但我不知道Java在后台是如何处理这些问题的。另外,我希望避免固定大小的字符串/数组

我的下一个想法是直接将路径存储在二进制整数中,如
0100111
(从左到右读取)。
然后,您可以使用
添加“向左移动”,您可以使用单个整数表示路径。这棵树的大小增加了1、2、4、8等

还请注意,当谈到“最小”时,请记住内存块大小限制,并且还要注意,二叉树可能会比路径表示大得多


0
1   2
3 4 5 6

摘自@realpointic的评论:
BitSet
对我来说很好。

那么
BitSet
呢?最小的存储单元是一个字节,所以在树中,您需要将每个位存储在一个字节中。假设这就是你所说的。如果您只想存储任意长度的位,我建议您签出<代码>位集
这似乎就是我要找的。谢谢非常感谢你的回答。我已经遇到了这个解决方案,我可能会使用它。请记住内存块大小限制是正确的,特别是在JVM上运行时。