Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Dictionary_Treemap - Fatal编程技术网

Java 数百万条目的已排序键值对

Java 数百万条目的已排序键值对,java,sorting,dictionary,treemap,Java,Sorting,Dictionary,Treemap,TreeMap是一种有效的数据结构,可以按排序顺序保存键值对。在我的场景中,我需要通过java程序管理大约2亿个键值对。当提供超过1200万个键值时,我可以看到我的TreeMap性能明显变慢。利用树状图电位的正确方法是什么。这就是树形图的限制。 即使我成功地放置了所有的键值对,我如何确保从这个映射中更快地检索。 我不能使用键值对数据库。你能量化“性能明显缓慢”吗?你的内存堆大小设置是什么?很可能缓慢是由GC的密集工作造成的:TreeMap中的12M个条目占用堆中约300Mb的内存(不考虑键值对象

TreeMap是一种有效的数据结构,可以按排序顺序保存键值对。在我的场景中,我需要通过java程序管理大约2亿个键值对。当提供超过1200万个键值时,我可以看到我的TreeMap性能明显变慢。利用树状图电位的正确方法是什么。这就是树形图的限制。 即使我成功地放置了所有的键值对,我如何确保从这个映射中更快地检索。
我不能使用键值对数据库。

你能量化“性能明显缓慢”吗?你的内存堆大小设置是什么?很可能缓慢是由GC的密集工作造成的:
TreeMap
中的12M个条目占用堆中约300Mb的内存(不考虑键值对象本身)。对于200M,它将是~5Gb(并且仅针对不包括的条目、键和值)。你的
-Xmx
设置是什么?你有足够的空闲物理内存吗?我个人避免使用TreeMap。HashMap的速度要快得多,因为基本操作是O(1)。如果需要按键顺序进行迭代,则可以迭代新树集(map.keySet())。这会将迭代成本增加到
O(n logn)
,但会使其他一切更快。只有在需要始终对键进行排序时,才使用
TreeMap